正则表达式接受缺失的单词

时间:2014-11-24 23:30:19

标签: regex expression

我正在尝试编写与句子匹配的正则表达式。以下是我想要匹配的三个句子

1) Volume High. My Example
2) Volume Low. My Example
3) Volume. My Example

我现在不知道如何在下面的正则表达式中表示缺少的单词

^Volume\s(High|Low|)\.\sMy Example$

上面的正则表达式只匹配句子1和2,但不匹配3.我怎样才能使它工作?

谢谢

4 个答案:

答案 0 :(得分:2)

您希望在\s之前加上*运算符含义"零或更多"时间并使用optional组。

^Volume\s*(High|Low)?\.\s*My Example$

Live Demo

答案 1 :(得分:1)

要使正则表达式中的标记可选(发生0或1次),请在其后面添加?

高关键字和低关键字已经分组为一个标记,因此(High|Low)会使它们成为可选项,但仍然需要之前的空格。

因此,即使下一个单词与...匹配,您也必须选择使空格可选。

^Volume\s?(High|Low)?\.\sMy Example$

...或创建一个包含空格的额外组,以便整个组可以是可选的......

^Volume(\s(High|Low|))?\.\sMy Example$

如果你正在捕捉High | Low组的值,那么添加一个额外的组可能很烦人;许多正则表达式实现允许您通过在开头添加?:来创建“非捕获组”,如下所示:

^Volume(?:\s(High|Low|))?\.\sMy Example$

答案 2 :(得分:1)

建议

^Volume\s(High|Low|)\.\sMy Example$

不起作用

Volume. My Example

因为在句号之前没有空格,并且表达式要求它。将空间移动到表达式中可以使它工作:

^Volume(\sHigh|\sLow|)\.\sMy Example$

答案 3 :(得分:1)

谢谢你们。我明白你的意思了 我最终使用了以下

^Volume\s*(High|Low|)\.\sMy Example$

我喜欢它,因为它更简单。 谢谢大家的帮助。