Python 正则表达式匹配由';分隔的多个字母数字字符-';
我试图编写一个正则表达式来匹配一个需求ID,它由字母数字字符和一个“-”组成,这可能会发生一次或多次 示例字符串为:Python 正则表达式匹配由';分隔的多个字母数字字符-';,python,regex,Python,Regex,我试图编写一个正则表达式来匹配一个需求ID,它由字母数字字符和一个“-”组成,这可能会发生一次或多次 示例字符串为: NXOS-ABCD-005-053 – Requirement No. 1 F56156-ISSU-1 - Requirement No 1 我使用regex 101网站尝试了下面的regex,但没有得到我需要的适当结果 ([A-Za-z0-9]+\-)* 我对使用上述正则表达式的理解是:;它将多次匹配所有字符A-Za-z0-9,后跟A-,并且这种组合可以出现一次或多次 但是
NXOS-ABCD-005-053 – Requirement No. 1
F56156-ISSU-1 - Requirement No 1
我使用regex 101网站尝试了下面的regex,但没有得到我需要的适当结果
([A-Za-z0-9]+\-)*
我对使用上述正则表达式的理解是:;它将多次匹配所有字符A-Za-z0-9,后跟A-,并且这种组合可以出现一次或多次
但是它给了我一些我没有预料到的群组日志。
我可以得到一些帮助来微调正则表达式吗?因为我试着用谷歌搜索了很多次,但都被各种用法弄糊涂了。
对此,任何帮助都将不胜感激
提前感谢。注意([A-Za-z0-9]+\-)*
可以匹配空字符串,因为它匹配一个或多个字母数字字符后跟连字符的序列的任何零次或多次出现。请注意,最后一个字母数字部分后面没有连字符,因此即使它按照您认为的方式工作,也不会与整个ID匹配
我建议
^[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*
或者,如果它不在字符串的开头
\b[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*\b
看
详情:
-字符串的开头^
-单词边界\b
-一个或多个字母数字字符[A-Za-z0-9]+
-在以下区域内重复零次或多次图案序列:(?:-[A-Za-z0-9]+)*
-连字符-
-一个或多个字母数字字符[A-Za-z0-9]+
-单词边界\b
^[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*
?或者,如果它不在字符串的开头,\b[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*
?注([A-Za-z0-9]+\-)*
可以匹配空字符串,因为它匹配一个或多个字母数字字符后跟连字符的序列的任何零次或多次出现。请注意,最后一个字母数字部分后没有连字符,因此即使它按您认为的方式工作,也不会与整个ID匹配。在上面的示例中,您期望的结果是什么?*是零次或更多次。另外,您描述的内容与ID不匹配。我建议使用例如@WiktorStribiżew:
这是不必要的,不是吗<代码>/^[A-Z0-9]+([A-Z0-9]+)*/i@Eduardo,这要看情况而定。在Python中,如果使用re.findall
,则非捕获组非常方便。您现在显示的是JavaScript/Ruby/PHP正则表达式文字符号,但您的问题是用Python标记的,因此我在顶部的评论中建议使用字符串模式。非常感谢您的帮助。这项工作做得非常好。