2024-05-14 14:08:13 发布
网友
我有一个文件保存IP地址的名称格式
<<%#$192.168.8.40$#% %#@Name_of_person@#% >>
我读了这个文件,现在想用pythons正则表达式提取这个列表
list=re.findall("<<%#$(\S+)$#%\s%#@(\w+\s*\w*)@#%\s>>",ace) print list
但名单总是空的。。你知道吗
有人能告诉我正则表达式的错误在哪里吗
edit-ace是保存从文件中读取的内容的变量
edit-ace
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]
u使用无效的正则表达式模式。 你可以用 r“<;\%\$(\S+)\$\%\S\%\@(\w+\S*\w*)@\%\S>;”替换 fandall方法中的“<;%\$(\S+)$\%\S%\@(\w+\S*\w*)@\%\S>;”
祝你好运~!你知道吗
$是正则表达式中的一个特殊字符,表示“行尾”(或“字符串尾”,具体取决于味道)。正则表达式的$后面有其他字符,因此只匹配结尾后面有这些字符的字符串,这是不可能的。你知道吗
您需要对$进行转义,例如:
\$
我建议使用以下正则表达式(由于您使用的是Python,所以格式化为原始字符串):
也就是说,
<<%#$
,然后是一个或多个非$字符,$#%
,一个空格字符,%#@
,一个或多个非@字符,@#%
,空格,>>
。你知道吗比如:
如果你只需要在“@”和“$”上拆分就可以得到任何结果,那么。。。你知道吗
也可以只使用内置的字符串函数:
相关问题 更多 >
编程相关推荐