2

正規表現を使用して、フォーマットで記述された値を解析しようとしてい(key###value)ます。値は常に数値になります。とにかく、Pythonでそれを行うのが最も簡単だと思うので、ここに私が試しているいくつかのコードがあります:

import re

line = "(text 1###123)(text 2###345)";

matchObj = re.match( r'\(.*###[0-9]+\)', line)

if matchObj:
   print matchObj.group(0) # produces (text 1###123)(text 2###345)
   # print matchObj.group(1) # gives an error
else:
   print "No match!!"

私が書いた正規表現に一致する 2 つの異なるオブジェクトがありますが、python はそれらを単一の文字列として返しました。これは私が望んでいたものではありません。どうすればこれを修正できますか?

実際、私が本当に望んでいるのは、文字列を のようなものに分割することです["text 1", "123", "text 2", "345]。誰かがそれを達成するための簡単な方法を持っているなら、私もそれを大いに感謝します.

4

2 に答える 2

5

これには適切な正規表現がありません。キャプチャ グループが必要です。あなたの例では、括弧がエスケープされています。正規表現として実際に必要なものは次のとおりです。の?後に*を指定すると、非貪欲になります (したがって、一致している間はできるだけ少ない文字を取得しようとします)。

\((.*?)###([0-9]+)\)

現在の正規表現は括弧のみをエスケープしているため、実際にはキャプチャ グループはありません。すべての一致を取得するには、を使用する必要がありますre.findall。ただし、2 つのキャプチャ グループを使用する必要がある場合は、次のようになります。

regex = r'\((.*?)###([0-9]+)\)'
re.findall(regex, "(text 1###123)(text 2###345)") # [("text 1", "123"), ("text 2", "345")]

平らにしたい場合は、それも非常に簡単です。

于 2013-05-18T01:35:59.533 に答える