我想知道是否可以使用带有python的正则表达式来捕获单词或单词的一部分(如果它位于字符串的末尾)。
例如:
目标词 - 马铃薯
字符串 - “这是一个关于马铃薯”的句子
字符串 - “这是一个关于 potat ”的句子
字符串 - “这是关于 pota ”的另一句话
谢谢!
答案 0 :(得分:3)
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',)
答案 1 :(得分:1)
不知道如何匹配python中的正则表达式,但正则表达式将是:
"\bp$|\bpo$|\bpot$|\bpota$|\bpotat$|\bpotato$"
如果它是字符串中的最后一个单词,那么这将匹配从p
到potato
的任何内容,例如,如果这是你想要的,那么也不会像“foopotato”那样。
|
表示替代,\b
是“单词边界”,因此它匹配单词和非单词字符之间的位置(不是字符)。并且$
匹配字符串的结尾(也是位置)。
答案 2 :(得分:0)
使用$
匹配字符串的末尾。例如,以下内容仅匹配字符串末尾的“马铃薯”(第一个示例):
"potato$"
这将匹配您的所有示例:
"pota[to]{1,2}$"
然而,有些风险也会与“potao”或“potaot”相匹配。
答案 3 :(得分:0)
import re
patt = re.compile(r'(p|po|pot|pota|potat|potato)$')
patt.search(string)
我很想使用r'po?t?a?t?o?$'
,但这也会匹配 poto 或 pott 。
答案 4 :(得分:0)
不,就我所知,你不能用正则表达式做到这一点,没有毫无意义的(p|po|pot ...)
匹配过多。相反,只需选择最后一个单词,然后使用子字符串匹配:
match = re.search('\S+$', haystack)
if match.group(0) == needle[:len(match.group(0))]:
# matches.