3

我在弄清楚如何检查该行是否包含破折号(-)然后捕获其中的一部分时遇到了一些麻烦。

这是我可以作为输入的字符串示例:

abc,xyz,ijk-a,opq

abc,xyz,ijk,opq

我想提取破折号之前的部分,如果它存在的话,即ijk. 如果没有破折号,我只想要ijk(如第二个字符串所示)。

以下正则表达式使用带有前瞻断言的 if 条件并完成这项工作,但始终生成一个空组,如此处Regex code here所示。我希望只有一个捕获组返回ijk

我认为正则表达式 if 条件只会返回 if 或 else 条件的组,而不是两者。

.*,(?(?=.*?-.*?)(.*?)-.*?|(.*?)),

谢谢

4

2 回答 2

2

使用 Perl 风格的正则表达式:

/[^,]*,[^,]*,([^,-]*)/

使用两个给定情况的示例:

perl -lane 'print $1 if /[^,]*,[^,]*,([^,-]*)/;' input

输出

ijk
ijk
于 2013-01-04T22:52:21.873 回答
0

尝试类似'([^-]+)(-([^-]+))?' 您的字符串,后跟连字符或不加连字符,将在第一个捕获组中。

于 2013-01-04T22:51:16.477 回答