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

3

我有些困惑,如何检查一行中是否包含破折号(-),然后捕获其中的一部分。

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

abc,xyz,ijk-a,opq

abc,xyz,ijk,opq

我希望提取破折号前的部分,如果有破折号,即ijk。 如果没有破折号,我只想要ijk(如第二个字符串所示)。
以下正则表达式使用lookahead断言的if条件并完成了工作,但总是生成一个空组,如此示例Regex code here所示。 我只想要一个捕获组返回ijk
我认为,正则表达式中的if条件只会返回if或else条件的组,而不是两者都返回。
.*,(?(?=.*?-.*?)(.*?)-.*?|(.*?)),

谢谢


在看了另一个答案后,我意识到我需要澄清一下。逗号分隔的字符串是否都在同一行上,并且每个字符串后面总是可以有一个选项“-something”? - DWright
2个回答

2

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

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

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

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

输出

ijk
ijk

0
尝试使用类似于'([^-]+)(-([^-]+))?'的东西。你的字符串,后面跟着一个连字符或不跟,将在第一个捕获组中。

1
“-”是一个特殊字符。请使用“\”进行转义。 - Zaffy
  • 只有在 [] 内部且不是 [] 内的最后一个字符时才是特殊字符
- DWright

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接