1

I have a file saving IP addresses to names in format

<<%#$192.168.8.40$#% %#@Name_of_person@#% >>

I read This file and now want to extract the list using pythons regular expressions

list=re.findall("<<%#$(\S+)$#%\s%#@(\w+\s*\w*)@#%\s>>",ace)
    print list

But the list is always an empty list..

can anyone tell me where is the mistake in the regular expression

edit-ace is the variable saving the contents read from the file

4

3 に答える 3

4

$ は正規表現の特殊文字で、「行末」(またはフレーバーに応じて「文字列の終わり」) を意味します。正規表現には $ の後に他の文字が含まれているため、これらの文字が末尾にある文字列にのみ一致しますが、これは不可能です。

次のように $ をエスケープする必要があります。\$

次の正規表現をお勧めします (Python を使用しているため、生の文字列としてフォーマットされています)。

 r"<<%#\$([^$]+)\$#%\s%#@([^@]+)@#%\s>>"

つまり、<<%#$、次に 1 つ以上の $ 以外の文字 、$#%空白文字%#@、1 つ以上の @ 以外の文字@#%、空白、>>.

于 2012-09-26T08:21:22.830 に答える
0

u無効な正規表現パターンを使用しています。r "<\%#\ $(\ S +)\ $#\%\ s \%#@(\ w + \ s * \ w *)@#\%\ s>>"を使用できます"<<%ファンダル法の#$(\ S +)$#%\ s%#@(\ w + \ s * \ w *)@#%\ s >> "

頑張ってください〜!

于 2012-09-26T09:09:34.123 に答える
0

何かのようなもの:

text = '<<%#$192.168.8.40$#% %#@Name_of_person@#% >>'
ip, name = [el[1] for el in re.findall(r'%#(.)(.+?)\1#%', text)]

「@」と「$」を分割するだけで取得できる場合...

from itertools import itemgetter

ip, name = itemgetter(1, 3)(re.split(r'[@\$]', text))

組み込みの文字列関数を使用することもできます。

tmp = text.split('$')
ip, name = tmp[1], tmp[2].split('@')[1]
于 2012-09-26T08:48:41.353 に答える