Python正则表达式:re.findall并不能看到所有的数学



我想用这样的模式找到所有数学:(一个字母((三个数字((两个字母(。

所以我的python正则表达式是:

[А,В,Е,К,М,Н,О,Р,С,Т,У,Х]d{3}[А,В,Е,К,М,Н,О,Р,С,Т,У,Х]{2}d{2,3}

其中

  • [А,В,Е,К,М,Н,О,Р,С,Т,У,Х]是字母集
  • CCD_ 2用于任何重复次数的图形

我写这段代码是为了解决我的问题:

import re
pattern = r"[А,В,Е,К,М,Н,О,Р,С,Т,У,Х]d{3}[А,В,Е,К,М,Н,О,Р,С,Т,У,Х]{2}d{2,3}"
string = "A123AA11 А222АА123 A12AA123 A123CC1234 AA123A12"
re.findall(pattern, string)

我怀疑看到了这个字符串列表:['A123AA11', 'А222АА123']

但我得到了这个:['А222АА123']

问题出在哪里?我在哪里犯了错误?

我不知道怎么做,但正则表达式中的A是A_(西里尔文((来自ASCII的U+0410或(1040d((

print(ord("А"))  # 1040
print(ord("A"))  # 65

然后方括号表示每个值之间的OR,因此此处[А,В,Е,К,М,Н,О,Р,С,Т,У,Х][ABEKMHOPCTYX,]包含逗号相同,您只需要[ABEKMHOPCTYX]

提供

string = "A123AA11 A222AA123 A12AA123 A123CC1234 A123A12"
pattern = r"[ABEKMHOPCTYX]d{3}[ABEKMHOPCTYX]{2}d{2,3}"
print(re.findall(pattern, string))  # ['A123AA11', 'A222AA123', 'A123CC123']

要只匹配完全匹配模式的单词,请使用单词边界b

pattern = r"b[ABEKMHOPCTYX]d{3}[ABEKMHOPCTYX]{2}d{2,3}b"
print(re.findall(pattern, string))  # ['A123AA11', 'A222AA123']

最新更新