繁体   English   中英

Python正则表达式匹配任意数量的数字,而不是紧跟句点

[英]Python regex match any number of digits not immediately followed by period

我有一个多行字符串列表。 我希望匹配这些字符串的第一行,如果它们以可变数量的数字开头而不是紧跟一个句点。

例如,列表可能是

list = ["42. blabla \n foo", "42 blabla \n foo", "422. blabla \n foo"]

我想要的输出是42 blabla

这段代码

import re 

list = ["42. blabla \n foo", "42 blabla \n foo", "422. blabla \n foo"]

regex_header = re.compile("^[0-9]+(?!\.).*\n")

for str in list:
    print(re.findall(regex_header, str))

输出

['42. blabla \n']
['42 blabla \n']
['422. blabla \n']

这个只适用于字符串开头的两个数字:

import re 

list = ["42. blabla \n foo", "42 blabla \n foo", "422. blabla \n foo"]

regex_header = re.compile("^[0-9]{2}(?!\.).*\n")

for str in list:
    print(re.findall(regex_header, str))

输出:

[]
['42 blabla \n']
['422. blabla \n']

你需要(?![.\\d])前瞻:

r"^\d+(?![.\d])"

请参阅正则表达式演示 细节:

  • ^ - 字符串的开头
  • \\d+ - 1+位数
  • (?![.\\d]) - 当前位置的右侧不允许使用任何点和任何其他数字。

查看Python演示

import re 
l = ["42. blabla \n foo", "42 blabla \n foo", "422. blabla \n foo"]
regex_header = re.compile(r"^[0-9]+(?![.\d])")
for s in l:
    if (regex_header.search(s)):
        print(s)
# => "42 blabla \n foo"

我的猜测是,也许这可能是我们想要输出的:

import re 

list = ["42. blabla \n foo", "42 blabla \n foo", "422. blabla \n foo"]

regex_header = re.compile("^[0-9]+(?!\.)\D*$")

for str in list:
    print(re.findall(regex_header, str))

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM