删除所有内容,但保持匹配

Delete all content but keeping matched

提问人:Emanuel 提问时间:7/31/2017 最后编辑:TotoEmanuel 更新时间:7/31/2017 访问量:1086

问:

如果我有一个很大的文本,并且我需要只保留匹配的内容,我该怎么做?

例如,如果我有这样的文本:

asdas8Isd8m8Td8r
asdia8y8dasd
asd8is88n8gd
asd8t8od8lsdas
as9ea9ad8r1n88r8e87g6765ejasdm8x

并使用这个正则表达式:将数字后面的所有字母分组并替换为 i 将所有(数字)(字母)重新调整为(字母)(如果我想删除其余字母并仅保留匹配的字母)?...[0-9]([a-z])\1

将此文本转换为

ImTr
y
ing
tol
earnregex

如何将此文本替换为分组并删除其余文本?

如果我想删除所有但不匹配的? 在这种情况下,将文本转换为:

8I8m8T8r
8y8d
8i8n8g
8t8o8l
9e9a9r1n8r7g5e8x

我能匹配所有不是的吗?[0-9]([a-z])

谢谢!:D

正则表达式 记事本++

评论

0赞 SkryptX 7/31/2017
你应该改进你的措辞。很难理解你的真正意思。如果您这样做,我们将能够给出更准确的答案。
0赞 Wiktor Stribiżew 7/31/2017
你确定你想要而不是在第二行吗?尝试替换为yyd(?i-s)[0-9]([a-z])|.(?{1}$1:)
0赞 Emanuel 7/31/2017
我正在尝试删除所有文本,但仅保持匹配...
0赞 Emanuel 7/31/2017
Wiktor,这奏效了......坦克!你能发布一个解释代码的答案吗?我很乐意给你一个赞......您知道如何制作相同的内容,但保留所有匹配的内容吗?喜欢这个8I8m8T8r 8y8d 8i8n8g 8t8o8l 9e9a9r1n8r7g5e8x
0赞 Wiktor Stribiżew 7/31/2017
@Emanuel:看我的回答,正则表达式是一样的,你只需要用(整个匹配)替换即可。$1$0

答:

4赞 Wiktor Stribiżew 7/31/2017 #1

您可以使用以下正则表达式:

(?i-s)[0-9]([a-z])|.

替换为 .(?{1}$1:)

若要删除除不匹配项之外的所有项,请使用具有相同正则表达式的替换项。(?{1}$0:)

细节

  • (?i-s)- 内联修饰符打开不区分大小写模式并关闭 DOTALL 模式(与换行符不匹配).
  • [0-9]([a-z])- 一个 ASCII 数字和捕获到第 1 组的任何 ASCII 字母(稍后引用字符串替换模式或从字符串替换模式中反向引用)$1\1
  • |-或
  • .- 除换行符外的任何字符。

更换细节

  • (?{1}- 条件替换的开始:如果组 1 匹配,则...
    • $1- 第 1 组的内容(如果使用反向引用,则为整个匹配项)$0
    • :-还。。。无
  • )- 条件替换模式的结束。

enter image description here

评论

2赞 Emanuel 7/31/2017
非常感谢盖伊!:D
1赞 user68650 2/4/2020
我一次又一次地使用它来匹配多个标准。我不能强调这是多么有用。比你又维克托!