1

我想知道是否可以将正则表达式与 python 一起使用来捕获一个单词或单词的一部分(如果它位于字符串的末尾)。

例如:
目标词 - 土豆
串 - “这是一个关于土豆的句子”
字符串 - “这是一个关于土豆的句子” 字符串 - “这是另一个关于土豆的句子

谢谢!

4

5 回答 5

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',)
于 2012-11-15T20:08:50.053 回答
1

不知道如何在 python 中匹配正则表达式,但正则表达式将是:

"\bp$|\bpo$|\bpot$|\bpota$|\bpotat$|\bpotato$"

如果它是字符串中的最后一个单词,这将匹配从pto的任何内容potato,例如,如果这是您想要的,则不是“foopotato”之类的东西。

|表示另一种选择,the是\b“单词边界”,因此它匹配单词和非单词字符之间的位置(不是字符)。并且$匹配字符串的结尾(也是一个位置)。

于 2012-11-15T20:08:10.210 回答
0

使用$匹配字符串的末尾。例如,以下内容仅匹配字符串末尾的 'potato'(第一个示例):

"potato$"

这将匹配您的所有示例:

"pota[to]{1,2}$"

但是,也有匹配“potao”或“potaot”的风险。

于 2012-11-15T20:04:58.020 回答
0
import re
patt = re.compile(r'(p|po|pot|pota|potat|potato)$')
patt.search(string)

我很想使用r'po?t?a?t?o?$',但这也可以匹配potopott

于 2012-11-15T20:11:54.787 回答
0

不,据我所知,你不能用正则表达式来做到这一点,没有(p|po|pot ...)过多的无意义匹配。相反,只需选择最后一个单词,并使用子字符串匹配它:

match = re.search('\S+$', haystack)
if match.group(0) == needle[:len(match.group(0))]:
    # matches.
于 2012-11-15T20:14:07.837 回答