我想知道是否可以将正则表达式与 python 一起使用来捕获一个单词或单词的一部分(如果它位于字符串的末尾)。
例如:
目标词 - 土豆
串 - “这是一个关于土豆的句子”
字符串 - “这是一个关于土豆的句子”
字符串 - “这是另一个关于土豆的句子”
谢谢!
import re
def get_matcher(word, minchars):
reg = '|'.join([word[0:i] for i in range(len(word), minchars - 1, -1)])
return re.compile('(%s)$' % (reg))
matcher = get_matcher('potato', 4)
for s in ["this is a sentence about a potato", "this is a sentence about a potat", "this is another sentence about a pota"]:
print matcher.search(s).groups()
输出
('potato',)
('potat',)
('pota',)
不知道如何在 python 中匹配正则表达式,但正则表达式将是:
"\bp$|\bpo$|\bpot$|\bpota$|\bpotat$|\bpotato$"
如果它是字符串中的最后一个单词,这将匹配从p
to的任何内容potato
,例如,如果这是您想要的,则不是“foopotato”之类的东西。
|
表示另一种选择,the是\b
“单词边界”,因此它匹配单词和非单词字符之间的位置(不是字符)。并且$
匹配字符串的结尾(也是一个位置)。
使用$
匹配字符串的末尾。例如,以下内容仅匹配字符串末尾的 'potato'(第一个示例):
"potato$"
这将匹配您的所有示例:
"pota[to]{1,2}$"
但是,也有匹配“potao”或“potaot”的风险。
import re
patt = re.compile(r'(p|po|pot|pota|potat|potato)$')
patt.search(string)
我很想使用r'po?t?a?t?o?$'
,但这也可以匹配poto或pott。
不,据我所知,你不能用正则表达式来做到这一点,没有(p|po|pot ...)
过多的无意义匹配。相反,只需选择最后一个单词,并使用子字符串匹配它:
match = re.search('\S+$', haystack)
if match.group(0) == needle[:len(match.group(0))]:
# matches.