Подтвердить что ты не робот

Python соответствует строке с регулярным выражением

Мне нужно регулярное выражение python, чтобы проверить, присутствует ли слово в строке. Строка разделяется запятыми, возможно.

Итак, например,

line = 'This,is,a,sample,string'

Я хочу искать на основе "sample", это вернет true. Я дерьмова с reg ex, поэтому, когда я посмотрел документы python, я увидел что-то вроде

import re
re.match(r'sample', line)

Но я не знаю, почему перед текстом должен быть сопоставлен "r". Может ли кто-нибудь помочь мне с регулярным выражением?

4b9b3361

Ответ 1

Вы уверены, что вам нужно регулярное выражение? Кажется, вам нужно знать только, присутствует ли слово в строке, поэтому вы можете сделать:

>>> line = 'This,is,a,sample,string'
>>> "sample" in line
 True

Ответ 2

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>
>>>

Ответ 3

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>

Таким образом, поиск найдет соответствие в любом месте, совпадение начнется только в начале

Ответ 4

Вам не нужны регулярные выражения, чтобы проверить, существует ли подстрока в строке.

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'

Ответ 5

Как и все остальные, лучше использовать оператор "in", он также может действовать в списках:

line = "This,is,a,sample,string"
lst = ['This', 'sample']
for i in lst:
     i in line

>> True
>> True

Ответ 6

Одна реализация Liner:

a=[1,3]
b=[1,2,3,4]
all(i in b for i in a)