Python 正则表达式:对带分隔符的词组使用交替
Python regex: Using Alternation for sets of words with delimiter
我想匹配一个字符串,其字符串元素应仅包含特定字符:
- [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)"
部分将 return 对 test_str='C5.3IV'
为真,但我想让它为真,即使两个罗马数字同时出现并带有分隔符 /
即正则表达式查询也应该为 test_str='C5.3IV/V'
重新运行。
我应该如何修改正则表达式?
谢谢
将定界符和罗马数字分组,像对待float/int中的小数点一样对待(不知道会不会出现,但最多只出现一次)。希望这对您有所帮助!
试试这个:
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。这样的 class 匹配一系列选项中的一个字符。您最常看到的是 [A-Z0-9]
这样的范围来匹配大写字母或数字,但您也可以添加单个字符,就像我为您的正则表达式所做的那样。
我想匹配一个字符串,其字符串元素应仅包含特定字符:
- [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)"
部分将 return 对 test_str='C5.3IV'
为真,但我想让它为真,即使两个罗马数字同时出现并带有分隔符 /
即正则表达式查询也应该为 test_str='C5.3IV/V'
重新运行。
我应该如何修改正则表达式?
谢谢
将定界符和罗马数字分组,像对待float/int中的小数点一样对待(不知道会不会出现,但最多只出现一次)。希望这对您有所帮助!
试试这个:
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。这样的 class 匹配一系列选项中的一个字符。您最常看到的是 [A-Z0-9]
这样的范围来匹配大写字母或数字,但您也可以添加单个字符,就像我为您的正则表达式所做的那样。