私はre.findall(p, text)
一般的にパターンを一致させるために使用しますが、今私は質問に出くわしました:
p
正規表現ではなく、通常の文字列として一致させたいだけです。
例:pには「+」または「*」が含まれる場合があります。これらの文字に正規表現のような特別な意味を持たせたくありません。言い換えれば、私はpを文字ごとに一致させたいのです。
この場合p
は不明なので、特殊文字を無視するために「\」を追加することはできません。
あなたが使用することができますre.escape
:
>>> p = 'foo+*bar'
>>> import re
>>> re.escape(p)
'foo\\+\\*bar'
または、文字列操作を使用して、p
が別の文字列内にあるかどうかを確認します。
>>> p in 'blablafoo+*bar123'
True
>>> 'foo+*bar foo+*bar'.count(p)
2
ちなみに、これは主p
に、適切な正規表現に埋め込みたい場合に役立ちます。
>>> re.match(r'\d.*{}.*\d'.format(re.escape(p)), '1 foo+*bar 2')
<_sre.SRE_Match object at 0x7f11e83a31d0>
正規表現が不要で、パターンが文字列のサブ文字列であるかどうかをテストするだけの場合は、次を使用します。
if pattern in string:
文字列の最初または最後でテストする場合:
if string.startswith(pattern): # or .endswith(pattern)
他の文字列メソッドについては、ドキュメントの文字列メソッドのセクションを参照してください。
文字列内の部分文字列のすべての場所を知る必要がある場合は、次を使用しますstr.find
。
offsets = []
offset = string.find(pattern, 0)
while offset != -1:
offsets.append(offset)
# start from after the location of the previous match
offset = string.find(pattern, offset + 1)
文字列に使用でき.find
ます。これは、「針」文字列の最初の出現のインデックスを返します(または-1
それが見つからない場合)。例えば
>>> a = 'test string 1+2*3'
>>> a.find('str')
5
>>> a.find('not there')
-1
>>> a.find('1+2*')
12