我有一个文件将 IP 地址保存为格式的名称
<<%#$192.168.8.40$#% %#@Name_of_person@#% >>
我读了这个文件,现在想使用 pythons 正则表达式提取列表
list=re.findall("<<%#$(\S+)$#%\s%#@(\w+\s*\w*)@#%\s>>",ace)
print list
但是列表始终是一个空列表..
谁能告诉我正则表达式的错误在哪里
edit-ace
是保存从文件中读取的内容的变量
$ 是正则表达式中的一个特殊字符,意思是“行尾”(或“字符串尾”,取决于风格)。您的正则表达式在 $ 之后有其他字符,因此仅匹配结尾后具有这些字符的字符串,这是不可能的。
您将需要转义 $,如下所示:\$
我建议使用以下正则表达式(格式化为原始字符串,因为您使用的是 Python):
r"<<%#\$([^$]+)\$#%\s%#@([^@]+)@#%\s>>"
即,<<%#$
,然后是一个或多个非$ 字符,$#%
,一个空格字符,%#@
,一个或多个非@ 字符,@#%
,空格,>>
。
就像是:
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]
你使用了无效的正则表达式模式。您可以使用 r"<\%#\$(\S+)\$#\%\s\%#@(\w+\s*\w*)@#\%\s>>" 替换 "<<% #$(\S+)$#%\s%#@(\w+\s*\w*)@#%\s>>" 在 fandall 方法中
祝你好运~!