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