正则表达式与值不匹配

2024-05-14 14:08:13 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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

但名单总是空的。。你知道吗

有人能告诉我正则表达式的错误在哪里吗

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


Tags: 文件ofnamere名称列表格式错误
3条回答

u使用无效的正则表达式模式。 你可以用 r“<;\%\$(\S+)\$\%\S\%\@(\w+\S*\w*)@\%\S>;”替换 fandall方法中的“<;%\$(\S+)$\%\S%\@(\w+\S*\w*)@\%\S>;”

祝你好运~!你知道吗

$是正则表达式中的一个特殊字符,表示“行尾”(或“字符串尾”,具体取决于味道)。正则表达式的$后面有其他字符,因此只匹配结尾后面有这些字符的字符串,这是不可能的。你知道吗

您需要对$进行转义,例如:\$

我建议使用以下正则表达式(由于您使用的是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]

相关问题 更多 >

    热门问题