避免从字符串中提取 IBAN 号码
Avoid extracting IBAN number from string
我试图避免从我的字符串中提取 IBAN 号码。
示例:
def get_umsatzsteuer_identifikationsnummer(string):
# Demo --> https://regex101.com/r/VHaS7Y/1
reg = r'DE[0-9 ]{12}|DE[0-9]{9}|DE [0-9]{9}'
match = re.compile(reg)
matched_words = match.findall(string)
return matched_words
string = "I want to get this DE813992525 and this DE813992526 number and this
number DE 813 992 526 and this number DE 813992526. I do not want the bank
account number: IBAN DE06300501100011054517."
get_umsatzsteuer_identifikationsnummer(string)
>>>>> ['DE813992525',
'DE813992526',
'DE 813 992 526',
'DE 813992526',
'DE063005011000']
结果中的最后一个数字是德国 IBAN 号码的(第一部分),我不想提取它。我怎样才能避免它?
您可以通过将 space 设为可选来缩短交替。如果你不想要最后一个数字,但你确实想要以点结尾的数字,你可以断言模式后面没有数字。
\b(?:DE[0-9 ]{12}|DE ?[0-9]{9})(?!\d)
对于第三个示例,您还可以使它更精确地匹配 3 乘以 3 数字前面的 space,因为 [0-9 ]{12}
也可能匹配 12 个 space。
\b(?:DE(?: \d{3}){3}|DE ?[0-9]{9})(?!\d)
我试图避免从我的字符串中提取 IBAN 号码。
示例:
def get_umsatzsteuer_identifikationsnummer(string):
# Demo --> https://regex101.com/r/VHaS7Y/1
reg = r'DE[0-9 ]{12}|DE[0-9]{9}|DE [0-9]{9}'
match = re.compile(reg)
matched_words = match.findall(string)
return matched_words
string = "I want to get this DE813992525 and this DE813992526 number and this
number DE 813 992 526 and this number DE 813992526. I do not want the bank
account number: IBAN DE06300501100011054517."
get_umsatzsteuer_identifikationsnummer(string)
>>>>> ['DE813992525',
'DE813992526',
'DE 813 992 526',
'DE 813992526',
'DE063005011000']
结果中的最后一个数字是德国 IBAN 号码的(第一部分),我不想提取它。我怎样才能避免它?
您可以通过将 space 设为可选来缩短交替。如果你不想要最后一个数字,但你确实想要以点结尾的数字,你可以断言模式后面没有数字。
\b(?:DE[0-9 ]{12}|DE ?[0-9]{9})(?!\d)
对于第三个示例,您还可以使它更精确地匹配 3 乘以 3 数字前面的 space,因为 [0-9 ]{12}
也可能匹配 12 个 space。
\b(?:DE(?: \d{3}){3}|DE ?[0-9]{9})(?!\d)