我需要一个 python 正则表达式来检查字符串中是否存在单词。该字符串可能由逗号分隔。
例如,
line = 'This,is,a,sample,string'
我想根据“样本”进行搜索,这将返回 true。我对 reg ex 很不满意,所以当我查看 python 文档时,我看到了类似的东西
import re
re.match(r'sample', line)
但我不知道为什么要匹配的文本前有一个“r”。有人可以帮我处理正则表达式吗?
你确定你需要一个正则表达式吗?似乎您只需要知道字符串中是否存在单词,因此您可以这样做:
>>> line = 'This,is,a,sample,string'
>>> "sample" in line
True
使r
字符串成为原始字符串,它不处理转义字符(但是,由于字符串中没有转义字符,因此这里实际上不需要它)。
此外,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
一班轮实施:
a=[1,3]
b=[1,2,3,4]
all(i in b for i in a)