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