我想用这样的模式找到所有数学:(一个字母((三个数字((两个字母(。
所以我的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']