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

これは、文字列の最後の単語である場合は ~ から任意の単語に一致しppotatoたとえば、「foopotato」のようなものには一致しません (これが必要な場合)。

|代替を示し、\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)

私は を使いたくなりましたが、それはpotopottr'po?t?a?t?o?$'にもマッチします。

于 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 に答える