我试图从字符串中提取这个文本"NL d ABNA ddddddddd“:
IBAN NL 91ABNA0417463300
IBAN NL91ABNA0417164300
Iban: NL 69 ABNA 402032566
该字符串可能有三种或更多的变体。
然而,我只谈到这一点:
NL\s?\d{2}\s?[A-Z]{4}0\s?\d{9}$
它与前两个示例相匹配,但与第三个示例不匹配。
见:https://regex101.com/r/zGDXa2/1。
我该怎么治疗呢?
发布于 2019-03-18 05:27:38
您可以使用以下正则表达式:
(?i)(?:(?<=IBAN(?:[:\s]\s|\s[:\s]))NL\s?\d{2}\s?[A-Z]{4}[0 ]\s?\d{9,10})|(?:(?<=IBAN[:\s])NL\s?\d{2}\s?[A-Z]{4}[0 ]\s?\d{9,10})
演示:
https://regex101.com/r/zGDXa2/11
如果您在python中工作,您可以删除(?:i)
并将其替换为标志re.I
或re.IGNORECASE
。
在:上测试
Uw BTW nummer NL80
IBAN NL 11abna0317164300asdfasf234
iBAN NL21ABNA0417134300 22
Iban: NL 29 ABNA 401422366f sdf
IBAN :NL 39 ABNA 0822416395s
IBAN:NL 39 ABNA 0822416395s
提取物:
NL 11abna0317164300
NL21ABNA0417134300
NL 29 ABNA 401422366
NL 39 ABNA 0822416395
NL 39 ABNA 0822416395
发布于 2019-03-17 10:57:35
regex101演示中的问题是,在$
之后,正则表达式中有一个额外的字符,所以删除它并将0
更改为[0 ]
,这修复了所有这些,并开始匹配您的第三行。正确的准则变成,
NL\s?\d{2}\s?[A-Z]{4}[0 ]\s?\d{9}$
发布于 2019-03-17 10:53:49
您只需删除所有空格和大写其余部分,如下所示:
iban = NL 91ABNA0417463300
iban.replace(" ", "")
iban.upper()
然后你的判断力是:
NL\d{2}ABNA(\d{10}|\d{9})
https://stackoverflow.com/questions/55210627
复制相似问题