我想将不同的正则表达式与字符串匹配。比如说
from os import listdir
from os.path import isfile, join
import os
import re
s = "rechnungsnr. 234342341"
re_nu = re.compile(r".?rechnung[s]*\s*nr[.]*[:]*\s*(\w*\d+[-.]?\d*)")
rn = re_nu.search(s)
rechnungsnr = (rn.groups())
print(rechnungsnr)
print(rn)
print(rn.group(1))
这将生成正确的组(文本后的数字):
('234342341',)
<re.Match object; span=(0, 22), match='rechnungsnr. 234342341'>
234342341
但是,如果用“|”展开正则表达式,则会得到不同的结果:
s = "rechnungsnr. 234342341"
re_nu = re.compile(r"rechnungs\s?nummer[:]*\s*(\w*\d+[-.]?\d*)|rechnung(?::*)(?:\s*)((?:\w*)(?:\d+)[-.]?(?:\d*))|.?rechnung[s]*\s*nr[.]*[:]*\s*(\w*\d+[-.]?\d*)| \
belegnummer(?::*)(?:\s*)((?:\w*)(?:\d+)[-.]?(?:\d*))|beleg(?:s*)[-.]?nr(?:.*)(?::*)(?:\s*)((?:\w*)(?:\d+)[-.]?(?:\d*))")
rn = re_nu.search(s)
rechnungsnr = (rn.groups())
print(rechnungsnr)
print(rn)
print(rn.group(1))
如中所示,在我要提取的数字之前,我得到2个“无”组:
(None, None, '234342341', None, None)
<re.Match object; span=(0, 22), match='rechnungsnr. 234342341'>
None
如何更改代码,使号码始终是第一组?正则表达式的目标是获取字符串后面的数字。该字符串可以是发票编号的任何名称(德语)。例如,数字可以在“rechnungsummer”之后,也可以在“rechnungsnr.”之后,也可以在“rechnungsnr:”之后,等等
由于
rn.groups()
正在返回一个元组,因此您可以执行如下列表理解:如果在所有情况下都是这样,那么列表理解将只返回包含单个元素的列表
相关问题 更多 >
编程相关推荐