首页 > 解决方案 > 如何创建可选的命名组?

问题描述

我想在命名组中捕获字符串。第二个字符串是可选的。如果此可选字符串缺少我的正则表达式代码不起作用。

(?<entry1>string1) (?<entry2>string2)? (?<entry3>string3)

如何使第二个字符串可选?

标签: regex-group

解决方案


如果我删除“?” 在每个组的开头(它们是做什么用的?https: //www.regextester.com/ 不接受它们)您的表达式适用于这些字符串:

<entry1>string1  <entry3>string3
<entry1>string1 <entry2>string2 <entry3>string3

您的正则表达式的问题是您可以省略第二组表达式<entry2>string2,但不能省略该组之后的空格。以下正则表达式字符串可能会按照您的预期工作。

(<entry1>string1) (<entry2>string2?) ?(<entry3>string3)
(<entry1>string1) ((<entry2>string2) )?(<entry3>string3)

第二个字符串可能更适合您的需求,但具有更多的组表达式。根据您是否真的需要空间,您可以微调正则表达式。


推荐阅读