如何在链式正则表达式(记事本++)中替换此表达式?
How can I replace this expression in chain regex (notepad++)?
我有这篇文章
14 二 25 三 12 四 40 五 10
我要获取“14二1425三142512四14251240五1425124010”
例如,当我将 (14 two ) 替换为 (14 two 14 ) 这个在 14 之后开始的我无法在 2 之后开始。
还有其他办法吗?
例如,使用匹配中未包含的组(匹配前的组)替换它?
请帮帮我
这应该可以解决您的问题:
正则表达式:((?:\s?\d+\s?)+)((?:[a-zA-Z](?![^a-zA-Z]+))+)
替换:
您需要单击“全部替换”按钮才能生效(不能一次完成,必须尽可能重复找到匹配项。Online PHP example)
解释:
\s
:匹配单个space字符
?
: 前面的表达式必须匹配0次或1次。
\s?
: 匹配一个space字符0次或1次。
\d
:匹配一个数字字符(相当于[0-9]
)。
+
:前面的表达式必须至少匹配一次(u到无限)。
\d+
:匹配尽可能多的数字字符(但至少匹配一次)。
()
: 捕获组
(?:)
: 非捕获组
((?:\s?\d+\s?)+)
:匹配一个可选的 space 字符后跟一个或多个数字字符后跟一个可选的 space 字符。该表达式被一个非捕获组包围,后跟一个加号。这意味着正则表达式将尝试匹配尽可能多的 space 和数字字符的组合(因此您最终可能会得到类似“14 25 12 40”的结果)。
捕获组旨在保留值以在 replacement.You 中重复使用它不能简单地在捕获组末尾添加加号而不包含非捕获组,因为它只会记住最后一个数字捕获(“12”而不是整个“14 25 12”用于构建“14 25 12 40”)。
[a-zA-Z]
:任意大小写匹配任意英文字母(小写,大写)。
</code>: 参考第一组中捕获的内容。</li>
<li><code>(?!)
:否定前瞻。
[^]
:负字符class,所以[^a-zA-Z]
表示匹配任何东西
((?:[a-zA-Z](?![^a-zA-Z]+))+)
:否定先行是为了确保我们不会总是匹配输入文本中的前“14 two”。没有它,我们最终会陷入无限循环,结果为“14 二 14 14 14 14 14 14 25 三 12 四 40 五 10”(重复“25”之前的“14”,直到达到超时)。
基本上,对于我们匹配的每个英文字母,我们先行断言第一个捕获组(例如“14”)的内容不存在于我们的数字序列中。
替换,
表示把捕获组1和2的内容,加一个space,把捕获组1的内容再放一次。
我有这篇文章
14 二 25 三 12 四 40 五 10
我要获取“14二1425三142512四14251240五1425124010”
例如,当我将 (14 two ) 替换为 (14 two 14 ) 这个在 14 之后开始的我无法在 2 之后开始。
还有其他办法吗? 例如,使用匹配中未包含的组(匹配前的组)替换它?
请帮帮我
这应该可以解决您的问题:
正则表达式:((?:\s?\d+\s?)+)((?:[a-zA-Z](?![^a-zA-Z]+))+)
替换:
您需要单击“全部替换”按钮才能生效(不能一次完成,必须尽可能重复找到匹配项。Online PHP example)
解释:
\s
:匹配单个space字符?
: 前面的表达式必须匹配0次或1次。\s?
: 匹配一个space字符0次或1次。\d
:匹配一个数字字符(相当于[0-9]
)。+
:前面的表达式必须至少匹配一次(u到无限)。\d+
:匹配尽可能多的数字字符(但至少匹配一次)。()
: 捕获组(?:)
: 非捕获组((?:\s?\d+\s?)+)
:匹配一个可选的 space 字符后跟一个或多个数字字符后跟一个可选的 space 字符。该表达式被一个非捕获组包围,后跟一个加号。这意味着正则表达式将尝试匹配尽可能多的 space 和数字字符的组合(因此您最终可能会得到类似“14 25 12 40”的结果)。
捕获组旨在保留值以在 replacement.You 中重复使用它不能简单地在捕获组末尾添加加号而不包含非捕获组,因为它只会记住最后一个数字捕获(“12”而不是整个“14 25 12”用于构建“14 25 12 40”)。
[a-zA-Z]
:任意大小写匹配任意英文字母(小写,大写)。</code>: 参考第一组中捕获的内容。</li> <li><code>(?!)
:否定前瞻。[^]
:负字符class,所以[^a-zA-Z]
表示匹配任何东西((?:[a-zA-Z](?![^a-zA-Z]+))+)
:否定先行是为了确保我们不会总是匹配输入文本中的前“14 two”。没有它,我们最终会陷入无限循环,结果为“14 二 14 14 14 14 14 14 25 三 12 四 40 五 10”(重复“25”之前的“14”,直到达到超时)。
基本上,对于我们匹配的每个英文字母,我们先行断言第一个捕获组(例如“14”)的内容不存在于我们的数字序列中。
替换,
表示把捕获组1和2的内容,加一个space,把捕获组1的内容再放一次。