[英]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.