我想匹配任何文本内部和匹配内部的某些行,我想要经常替换某个字符,因为它发生了。 示例文本:
任何文字和“更多”“更多”。这里不要替换引号 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]*\(.+\)
不幸的是,我不知道如何匹配每个引用并替换它......
答案 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
后跟This
或That
或Anything
\s*
- 0+ whitespaces \(
- 文字(
符号)
- 非捕获组的结束[^()"]*
- (
,)
和"
以外的任何0 +字符\K
- 匹配重置运算符"
- 双引号。答案 1 :(得分:0)
你真的需要更换内部正则表达式吗?如果您的正则表达式找到了您想要的内容,则可以替换找到的字符串
上的字符