在Python中,如何在使用字典键作为模式时阻止re.search的部分匹配

-3 投票
2 回答
913 浏览
提问于 2025-04-17 01:22

在Python中,如果你想用字典的键作为模式来使用re.search,但又想避免部分匹配,该怎么做呢?在这个问题中,我希望不通过遍历字典值中的嵌套列表来解决。我尝试把正则表达式添加到搜索模式中,但结果出现了错误。

部分匹配:

>>> d
{'server': '192.168.1.1, 192.168.1.22, 192.168.1.2'}

>>> e
'192.168.1'

>>> match = re.search(e, d['server'])

>>> if match:
...   print match.group()
...
192.168.1

2 个回答

0

在正则表达式中,一个没有反斜杠(在Python中是两个反斜杠\\)的.是一个特殊字符,它可以匹配任何一个字符。如果你想找以某个模式开头的IP地址,可以使用192\\.168\\.1\\.\d+或者类似的写法。另外,如果你能把每个IP地址单独放到一个字符串里,那么你可以使用:

if ip.startswith(e):
  # etc.
2

如果你只是想匹配一个IPv4地址,可以使用这个正则表达式 192\.168\.1\.\d+

>>> import re
>>> text = '192.168.1.2, 192.168.11.9, 192.168.1.255, 10.14.1.1'
>>> regex = '192\.168\.1\.\d+'
>>> re.search(regex, text).group()
'192.168.1.2'
>>> re.findall(regex, text)
['192.168.1.2', '192.168.1.255']

撰写回答