1

我有一个文件将 IP 地址保存为格式的名称

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

我读了这个文件,现在想使用 pythons 正则表达式提取列表

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

但是列表始终是一个空列表..

谁能告诉我正则表达式的错误在哪里

edit-ace是保存从文件中读取的内容的变量

4

3 回答 3

4

$ 是正则表达式中的一个特殊字符,意思是“行尾”(或“字符串尾”,取决于风格)。您的正则表达式在 $ 之后有其他字符,因此仅匹配结尾后具有这些字符的字符串,这是不可能的。

您将需要转义 $,如下所示:\$

我建议使用以下正则表达式(格式化为原始字符串,因为您使用的是 Python):

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

即,<<%#$,然后是一个或多个非$ 字符,$#%,一个空格字符,%#@,一个或多个非@ 字符,@#%,空格,>>

于 2012-09-26T08:21:22.830 回答
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 回答
0

你使用了无效的正则表达式模式。您可以使用 r"<\%#\$(\S+)\$#\%\s\%#@(\w+\s*\w*)@#\%\s>>" 替换 "<<% #$(\S+)$#%\s%#@(\w+\s*\w*)@#%\s>>" 在 fandall 方法中

祝你好运~!

于 2012-09-26T09:09:34.123 回答