我想匹配字符串元素应仅包含特定字符的字符串:
我提供的正则表达式如下
bool(re.match(r'(A|C|K|M|F){1}\d+\.?\d?(I|II|III|IV|V)$', test_str))
"(I|II|III|IV|V)"
, test_str='C5.3IV'
部分将返回true,但即使两个罗马数字同时出现,也带有分隔符/
,即正则表达式查询,我想要成立应该对test_str='C5.3IV/V'
也适用。
我应该如何修改正则表达式?
由于
答案 0 :(得分:0)
对分隔符和罗马数字进行分组,并按照处理float / int中的小数点的方式对待它(您不知道它是否会出现,但最多只出现一次)。希望这有帮助!
答案 1 :(得分:0)
试试这个:
bool(re.match(r'[ACKMF]\d+\.?\d?(I|II|III|IV|V)(/(I|II|III|IV|V))*$', test_str))
我还将表达式的开头从(A|C|K|M|F){1}
更改为[ACKMF]
方括号之间的字符组成character class。这样的类匹配一系列选项中的一个字符。您最常见的是使用[A-Z0-9]
等范围来匹配大写字母或数字,但您也可以添加单个字符,就像我为您的正则表达式所做的那样。