正则表达式?匹配部分或整个单词

时间:2012-11-15 20:02:24

标签: python regex

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

例如:
目标词 - 马铃薯
字符串 - “这是一个关于马铃薯”的句子 字符串 - “这是一个关于 potat ”的句子 字符串 - “这是关于 pota ”的另一句话

谢谢!

5 个答案:

答案 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$"

如果它是字符串中的最后一个单词,那么这将匹配从ppotato的任何内容,例如,如果这是你想要的,那么也不会像“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.