替换RegEx匹配中的字符

时间:2017-06-14 05:29:35

标签: regex pcre

我想匹配任何文本内部和匹配内部的某些行,我想要经常替换某个字符,因为它发生了。 示例文本:

  

任何文字和“更多”“更多”。这里不要替换引号    CatchThis(这里没有引号,“不再是文字”,“依旧等等......”)
   catchthat(“其他文字”,“或更少”)
  “之间”的一些文字    CatchAnything(“更多”,“更多”,没有引号,“文字墙”)
  更多(“text”“”“)和之后的引用......

现在我想用圆括号替换圆括号内的每个引号,比方说,哈希符号。 期望的结果:

  

任何文字和“更多”“更多”。这里不要替换引号    CatchThis(这里没有引号,#更多文字#,#等等......等等)
   catchthat(#some some text#,#or less#)
  “之间”的一些文字    CatchAnything(#even more#,#and more#,no quotes there,#wall of text#)
  更多(“text”“”“)和之后的引用......

匹配线条很容易。这是我的模式:

(?i)Catch(?:This|That|Anything)[ \t]*\(.+\)

不幸的是,我不知道如何匹配每个引用并替换它......

2 个答案:

答案 0 :(得分:3)

在2 不同分隔符中匹配所有匹配模式的常用方法是使用基于\G anchor的正则表达式。

(?i)(?:\G(?!\A)|Catch(?:This|That|Anything)\s*\()[^()"]*\K"

请参阅regex demo

<强>解释

  • (?i) - 不区分大小写的修饰符
  • (?: - 一个匹配2个替代品的非捕获组
    • \G(?!\A) - 上一次成功匹配后字符串中的位置(因为\G也匹配字符串的开头,(?!\A)是排除这种可能性所必需的)
    • | - 或
    • Catch(?:This|That|Anything) - Catch后跟ThisThatAnything
    • \s* - 0+ whitespaces
    • \( - 文字(符号
  • ) - 非捕获组的结束
  • [^()"]* - ()"以外的任何0 +字符
  • \K - 匹配重置运算符
  • " - 双引号。

答案 1 :(得分:0)

你真的需要更换内部正则表达式吗?如果您的正则表达式找到了您想要的内容,则可以替换找到的字符串

上的字符