Ответ 1
Вы уверены, что вам нужно регулярное выражение? Кажется, вам нужно знать только, присутствует ли слово в строке, поэтому вы можете сделать:
>>> line = 'This,is,a,sample,string'
>>> "sample" in line
True
Мне нужно регулярное выражение python, чтобы проверить, присутствует ли слово в строке. Строка разделяется запятыми, возможно.
Итак, например,
line = 'This,is,a,sample,string'
Я хочу искать на основе "sample", это вернет true. Я дерьмова с reg ex, поэтому, когда я посмотрел документы python, я увидел что-то вроде
import re
re.match(r'sample', line)
Но я не знаю, почему перед текстом должен быть сопоставлен "r". Может ли кто-нибудь помочь мне с регулярным выражением?
Вы уверены, что вам нужно регулярное выражение? Кажется, вам нужно знать только, присутствует ли слово в строке, поэтому вы можете сделать:
>>> line = 'This,is,a,sample,string'
>>> "sample" in line
True
r
делает строку необработанной строки, которая не обрабатывает escape-символы (однако, поскольку в строке нет ни одного символа, на самом деле это не необходимо здесь).
Кроме того, re.match
соответствует началу строки. Другими словами, он ищет точное соответствие между строкой и шаблоном. Чтобы сопоставить материал, который может быть где угодно в строке, используйте re.search
. См. Демонстрацию ниже:
>>> import re
>>> line = 'This,is,a,sample,string'
>>> re.match("sample", line)
>>> re.search("sample", line)
<_sre.SRE_Match object at 0x021D32C0>
>>>
r обозначает необработанную строку, поэтому такие вещи, как \, будут автоматически экранированы Python.
Обычно, если вы хотите, чтобы ваш шаблон включал что-то вроде обратной косой черты, вам нужно было бы избежать этого с помощью другой обратной косой черты. необработанные строки устраняют эту проблему.
В вашем случае это не имеет большого значения, но это хорошая привычка вставать рано, иначе что-то вроде \b укусит вас сзади, если вы не будете осторожны (будет интерпретироваться как символ обратного пространства вместо границы слова)
В соответствии с re.match vs re.search здесь приведен пример, который прояснит его для вас:
>>> import re
>>> testString = 'hello world'
>>> re.match('hello', testString)
<_sre.SRE_Match object at 0x015920C8>
>>> re.search('hello', testString)
<_sre.SRE_Match object at 0x02405560>
>>> re.match('world', testString)
>>> re.search('world', testString)
<_sre.SRE_Match object at 0x015920C8>
Таким образом, поиск найдет соответствие в любом месте, совпадение начнется только в начале
Вам не нужны регулярные выражения, чтобы проверить, существует ли подстрока в строке.
line = 'This,is,a,sample,string'
result = bool('sample' in line) # returns True
Если вы хотите узнать, содержит ли строка шаблон, то вы должны использовать re.search
line = 'This,is,a,sample,string'
result = re.search(r'sample', line) # finds 'sample'
Это лучше всего использовать при сопоставлении с образцом, например:
line = 'my name is bob'
result = re.search(r'my name is (\S+)', line) # finds 'bob'
Как и все остальные, лучше использовать оператор "in", он также может действовать в списках:
line = "This,is,a,sample,string"
lst = ['This', 'sample']
for i in lst:
i in line
>> True
>> True
Одна реализация Liner:
a=[1,3]
b=[1,2,3,4]
all(i in b for i in a)