想检查一个字符串是否包含 -

时间:2013-01-04 22:47:01

标签: regex if-statement lookahead

我在弄清楚如何检查线条是否包含短划线(-)然后捕获其中的一部分时遇到了一些麻烦。

以下是我可以输入的字符串示例:

abc,xyz,ijk-a,opq

abc,xyz,ijk,opq

我想在短划线之前提取部分,如果它存在,即ijk。 如果没有短划线,我只想要ijk(如第二个字符串所示)。

以下正则表达式使用带有先行断言的if条件并执行该作业但始终生成一个空组,如此处所示Regex code here。 我想只有一个捕获组返回ijk

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

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

由于

2 个答案:

答案 0 :(得分:2)

使用Perl样式正则表达式:

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

使用两个给定案例的例子:

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

输出

ijk
ijk

答案 1 :(得分:0)

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