我将举几个例子,因为我认为这是描述我想要的最佳方式,但基本上我只想保留数字,但根据第一个数字(1或2:AAA)将文本添加到开头。 ,3:BBB,4或5:XYZ):
INITIAL STRINGS:
Blah 12345 Blah
Blah 22345 Blah
Blah 32345 Blah
Blah 42345 Blah
Blah 52345 Blah
结果:
AAA12345
AAA22345
BBB32345
XYZ42345
XYZ52345
正则表达式搜索:
([0=9])([0-9]{4})
正则表达式替换为:
(SOME WAY OF DECIDING BETWEEN AAA|BBB|XYZ depending on \1!)\1\2
这可能吗?
答案 0 :(得分:4)
使用Notepad ++似乎确实有办法实现这一点,因为它支持条件替换,这在此问题的接受答案中有详细说明:How to use conditionals when replacing in Notepad++ via regex
但请注意,为每个案例进行多次查找/替换可能更容易,更快......
答案 1 :(得分:4)
您不需要在此使用正则表达式条件功能(即:(?(condition)true|false)
。
你可以用你需要的数据创建一个虚假的最后一行(最后没有换行符):
Blah 12345 Blah
Blah 22345 Blah
Blah 32345 Blah
Blah 42345 Blah
Blah 52345 Blah
AAA#BBB#XYZ
并使用此模式:
^[^0-9\n]*(?:((?|[12](?=(?>.*\n)*([^#]+))|3(?=(?>.*\n)*[^#]*#([^#]+))|[45](?=(?>.*\n)*(?:[^#]*#){2}([^#]+)))\d+).*|.*\z)
这个替代品:
$2$1
模式细节:
^ # start of a line
[^0-9\n]* # all that isn't a digit
(?:
( # first capture group for the number
(?| # branch reset: all capture have the same number inside (2 here)
[12]
(?= # lookahead to reach the good string
(?>.*\n)* # reach the last line
([^#]+) # capture the first string
)
|
3
(?=
(?>.*\n)*
[^#]*# # skip the first string
([^#]+) # capture the second
)
| # same thing
[45](?=(?>.*\n)*(?:[^#]*#){2}([^#]+))
) # close the branch reset group
\d+
) # close the capture group 1
.* # match the end of the line
|
.*\z # match the last line
)
答案 2 :(得分:2)
使用
^.* ((?:([12])|(3)|([45]))\d{4}) .*
并替换为
(?2AAA:(?3BBB:XYZ))$1
模式匹配:
^
- 行首.*
- 除了换行符之外的零个或多个字符 ((?:([12])|(3)|([45]))\d{4})
- 一个空格,1个特定数字(1
或2
- 第2组,3
- 第3组,4
- 第4组,以及另外4位数.*
- 其余部分替换模式详细信息:
(?2
- 如果第二组匹配,
AAA
- 添加AAA
:
- 或(?3
- 如果第3组匹配,
BBB
- 插入BBB
:
- 或XYZ
- 插入XYZ
)
)
$1
- 并插入第1组内容(整个5位数字)。