0

我想匹配一个字符串元素应该只包含特定字符的字符串:

  • [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'但我想让它成为真,即使两个罗马数字同时存在并带有分隔符,/即正则表达式查询也应该返回真test_str='C5.3IV/V'

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

谢谢

4

2 回答 2

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]字符。这样的类匹配一系列选项中的一个字符。您最常看到它们具有[A-Z0-9]匹配大写字母或数字的范围,但您也可以添加单个字符,就像我为您的正则表达式所做的那样。

于 2017-11-10T06:50:20.203 回答
0

对分隔符和罗马数字进行分组,并以与处理 float / int 中的小数点相同的方式处理它(您不知道它是否会出现,但它最多只会出现一次)。希望这可以帮助!

于 2017-11-10T06:49:00.267 回答