Python正则表达式:对带有分隔符的单词组使用Alternation

时间:2017-11-10 06:44:33

标签: python regex-alternation

我想匹配字符串元素应仅包含特定字符的字符串:

  • [A,C,K,M,F]
  • 中的第一个字符
  • 后跟一个数字(浮点数或整数)。允许的实例:1,2.5,3.6,9,0,6.3等。
  • 以这些罗马数字[I,II,III,IV,V]中的任何一个结尾。

我提供的正则表达式如下

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'也适用。

我应该如何修改正则表达式?

由于

2 个答案:

答案 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]等范围来匹配大写字母或数字,但您也可以添加单个字符,就像我为您的正则表达式所做的那样。