包含一个词或另一个词的正则表达式

119

我需要创建一个匹配整数后跟“秒”或“分钟”的表达式。

我尝试了这个表达式:([0-9]+)\s+(\bseconds\b)|(\bminutes\b)

它对于“秒”可以正常工作,但对于“分钟”不行。

例如,“5秒”返回“5;seconds;”,而“5分钟”返回“;;minutes”。

3个回答

131
您刚才在“OR”符号上错过了一个额外的括号。以下内容应该能解决问题:
([0-9]+)\s+((\bseconds\b)|(\bminutes\b))

如果没有这些,你将只匹配一个后面跟着秒的数字,或者只匹配单词“minutes”。


24
但那是一个“额外的匹配项”,不是必须的。可以使用([0-9]+)\s+(?:(\bseconds\b)|(\bminutes\b))或者([0-9]+)\s+(\bseconds\b|\bminutes\b) - dognose
4
好的,没问题!确实不需要在“seconds”和“minutes”周围加上括号。 - micantox

61

您可以使用单个组来表示秒/分钟。以下表达式可能符合您的需求:

([0-9]+)\s*(seconds|minutes)

在线演示


5

如果您关心单词边界并希望最小限度地保留匹配,请使用以下内容:

([0-9]+)\s*\b(seconds|minutes)\b

如果数字和文本之间没有空格,这将无法工作。 - Toto
1
@Toto 原始问题中数字和单词之间有一个空格。如果您想使该空格变为可选,则省略第一个 '\b'。 - Richard Garside

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接