Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在正则表达式中处于search()和findall()之间_Python_Regex - Fatal编程技术网

Python 在正则表达式中处于search()和findall()之间

Python 在正则表达式中处于search()和findall()之间,python,regex,Python,Regex,一个要求我为IP地址创建正则表达式的个人项目导致了以下僵局 pattern = r'123\.145\.167\.[0-9]{1,2}' source = "123.145.167.0, 123.145.167.99, 123.145.167.100" n = re.search(pattern, source) print n.group() pattern = r'123\.145\.167\.[0-9]{1,2}' source = "123.145.167.0, 123.145.16

一个要求我为IP地址创建正则表达式的个人项目导致了以下僵局

pattern = r'123\.145\.167\.[0-9]{1,2}'
source = "123.145.167.0, 123.145.167.99, 123.145.167.100"
n = re.search(pattern, source)
print n.group()


pattern = r'123\.145\.167\.[0-9]{1,2}'
source = "123.145.167.0, 123.145.167.99, 123.145.167.100"
n = re.compile(pattern)
print n.findall(source)
当使用search只匹配源字符串中的第一个元素时,findall通过提供如下输出来产生问题

['123.145.167.0', '123.145.167.99', '123.145.167.10']
我是否可以获得123.145.167.0和123.145.167.99的匹配项,而不是123.145.167.100的匹配项

我已经做得很彻底了,但还不知道如何解决我的问题。

最后抛出一个答案:
\b

pattern = r'123\.145\.167\.[0-9]{1,2}\b'
source = "123.145.167.0, 123.145.167.99, 123.145.167.100"
n = re.compile(pattern)
print n.findall(source)


您需要为匹配定义边界
123.145.167.10
123.145.167.100
范围内。您可以使用
\b
标记定义边界

r"\b123\.145\.167\.[0-9]{1,2}\b"
您可以使用前瞻性断言:

角色

(?=[^0-9]|$)
这意味着您只想检查以下是否有非数字字符或字符串结尾。此检查不会“使用”任何字符,并且仅影响表达式是否匹配。通过这种方法,
findall
将提供您想要的结果

从:

(?=…)匹配如果。。。匹配下一个,但不消耗任何 一串这称为前瞻断言。例如,艾萨克 (?=Asimov)仅当后跟“Asimov”时才与“Isaac”匹配


你可能想了解词的边界是什么。此外,
re.search()
re.findall()
之间有一个基本的区别。
pattern = r'123\.145\.167\.[0-9]{1,2}(?=[^0-9]|$)'
(?=[^0-9]|$)