Regex 要检查字符串是否包含-

Regex 要检查字符串是否包含-,regex,if-statement,lookahead,Regex,If Statement,Lookahead,我在弄清楚如何检查该行是否包含破折号(-)并捕获其中的一部分时遇到了一些问题 以下是我可以作为输入的字符串示例: abc,xyz,ijk-a,opq abc,xyz,ijk,opq 我想提取破折号之前的部分,如果它存在,即ijk。 如果没有破折号,我只想要ijk(如第二个字符串所示) 下面的正则表达式使用带有前瞻断言的if条件并执行该作业,但始终生成一个空组,如图所示。 我希望只有一个捕获组返回ijk 我认为正则表达式if条件只返回if或else条件的组,而不是同时返回两者 .*,(?(?=

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

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

abc,xyz,ijk-a,opq

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

下面的正则表达式使用带有前瞻断言的if条件并执行该作业,但始终生成一个空组,如图所示。 我希望只有一个捕获组返回
ijk

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

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

试试类似于
'([^-]+)([^-]+)?'

您的字符串(后跟连字符与否)将位于第一个捕获组中。

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

/[^,]*,[^,]*,([^,-]*)/
使用两个给定案例的示例:

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

ijk
ijk

在看到另一个答案后,我意识到我需要澄清。逗号分隔的字符串是否都在一行上,并且您始终可以有一个选项-每个字符串后面的某个内容?
-
是一个特殊字符。用“\`.-转义,仅当它不是[]中的最后一个字符时,才在[]中特别