这可能通过正则表达式有条件吗?

时间:2016-05-19 05:42:56

标签: regex conditional

假设我已成功捕获以下群组:

/1 "text1"
/2 "notation1"

现在,我想将/1替换为"newtext1" iff /2包含"notation1"。这可以通过条件陈述吗?

或通过任何其他方法?

2 个答案:

答案 0 :(得分:1)

正则表达式没有条件语句,允许您检查捕获组是否已捕获某个值。您有两种选择:

  1. 更改模式,使其仅在找到notation1时匹配,即regex = (text1)(notation1),replacement = newtext1\2
  2. 如果您的编程语言支持它,请创建一个替换函数,用于检查第2组的内容并返回所需的替换字符串。例如在python中你可以这样做:re.sub(r'(text1)(notation1)', lambda match: 'newtext1notation1' if match.group(2)=='notation1' else 'text1notation1', 'text1notation1')

答案 1 :(得分:0)

假设您在perl中,替换将由e(使用三元条件运算符计算字符串作为运算符)修饰符完成。

$s = "text1 notation1";
$s=~s/(\w+)\s(\w+)/($2 eq "notation1")?"newtext1 $2":"$1  $2"/e;
print $s;