这是我下面的代码。当我运行它时,我收到错误:
c:\Users\renne\Documents\Code\Text Analysis\Assignment1.1C.py:27:
FutureWarning:位置 54 可能存在嵌套集
对于项目在
re.finditer("(?P<host>\d{3}[.]\d{3}[.]\d{3}[.]\d{3})(?P<user_name>[[\w]+\d{4}]|[-])(?P<time>\d{2}/\w+/\d{4}:\d{2}:\d{2}:\d{2} -\d{4})(?P<request>[A-Z]+ \S* HTTP/\d[.]\d)", logdata):
我不知道如何解决这个问题。我检查了我的代码几次,但无法找出问题所在。
我使用测试数据中的随机字符串而不是整个文本文件来使测试更容易。当这不起作用时改变logdata = '...'
来阅读。
import re
logdata = '146.204.224.152 - feest6811 [21/Jun/2019:15:45:24 -0700] "POST /incentivize HTTP/1.1" 302 4622'
dict = {}
expression = """
(?P<host>\d{3}[.]\d{3}[.]\d{3}[.]\d{3})
(?P<user_name>[[\w]+\d{4}]|[-])
(?P<time>\d{2}/\w+/\d{4}:\d{2}:\d{2}:\d{2} -\d{4})
(?P<request>[A-Z]+ \S* HTTP/\d[.]\d)
"""
for item in re.finditer("(?P<host>\d{3}[.]\d{3}[.]\d{3}[.]\d{3})(?P<user_name>[[\w]+\d{4}]|[-])(?P<time>\d{2}/\w+/\d{4}:\d{2}:\d{2}:\d{2} -\d{4})(?P<request>[A-Z]+ \S* HTTP/\d[.]\d)", logdata):
print(item.groupdict()['host'])
print(item.groupdict())
您收到警告是因为一对未转义的方括号内有一对未转义的方括号。请参阅re
文档:
支持嵌套集合和集合操作,如下所示Unicode 技术标准 #18 https://unicode.org/reports/tr18/将来可能会添加。这会改变语法,因此为了促进这种改变未来警告 https://docs.python.org/3/library/exceptions.html#FutureWarning暂时将在模棱两可的情况下提出。这包括以文字开头的集合'['
或包含文字字符序列'--'
, '&&'
, '~~'
, and '||'
。为了避免警告,请使用反斜杠转义它们。
The [[\w]+\d{4}]
错误,因为它匹配一个或多个[
或单词字符(带有[[\w]+
)然后是四位数字(\d{4}
),然后是文字]
字符(与]
)。您需要删除此处的所有方括号。
您可以使用
r'(?P<host>\d{3}\.\d{3}\.\d{3}\.\d{3}) - (?P<user_name>\w+\d{4}|-) \[(?P<time>\d{2}/\w+/\d{4}:\d{2}:\d{2}:\d{2} -\d{4})] "(?P<request>[A-Z]+ \S* HTTP/\d\.\d)'
See the 正则表达式演示 https://regex101.com/r/nAOxqE/1.
如果您在其他场景中遇到此错误,您可能需要以不同的方式修复它:
- 当你需要匹配文字时
[
or ]
并使用它们方括号内, 逃脱]
并且不要逃避[
. E.g. [a-zA-Z[\]]
匹配 ASCII 字母,[
or ]
。您还可以保留]
如果放在字符类的开头则未转义:[]A-Za-z[]
= [a-zA-Z[\]]
= [][a-zA-Z]
.
- 当你想匹配文字时
[
or ]
方括号之外(字符类),你需要逃脱[
并保留]
没有逃脱。例如。\[[0-9]+]
火柴[
,然后是一位或多位数字,然后是]
char.
- 请注意,在字符类中使用单个简写或字符被认为是不好的做法,并且可能会导致误解,进而可能导致此类问题。代替
[\w]+
,始终使用\w+
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)