正则表达式与值不匹配

时间:2012-09-26 08:18:24

标签: python regex

我有一个文件将IP地址保存到格式为

的名称
<<%#$192.168.8.40$#% %#@Name_of_person@#% >>

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

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

但是列表总是一个空列表..

任何人都可以告诉我正则表达式中的错误在哪里

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

3 个答案:

答案 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方法

祝你好运〜!