我在弄清楚如何检查线条是否包含短划线(-
)然后捕获其中的一部分时遇到了一些麻烦。
以下是我可以输入的字符串示例:
abc,xyz,ijk-a,opq
abc,xyz,ijk,opq
我想在短划线之前提取部分,如果它存在,即ijk
。
如果没有短划线,我只想要ijk
(如第二个字符串所示)。
以下正则表达式使用带有先行断言的if条件并执行该作业但始终生成一个空组,如此处所示Regex code here。
我想只有一个捕获组返回ijk
。
我认为正则表达式if条件只会返回if或else条件的组而不是两者。
.*,(?(?=.*?-.*?)(.*?)-.*?|(.*?)),
由于
答案 0 :(得分:2)
使用Perl样式正则表达式:
/[^,]*,[^,]*,([^,-]*)/
使用两个给定案例的例子:
perl -lane 'print $1 if /[^,]*,[^,]*,([^,-]*)/;' input
输出
ijk
ijk
答案 1 :(得分:0)
尝试'([^-]+)(-([^-]+))?'
之类的内容
您的字符串,后跟连字符,将在第一个捕获组中。