【问题标题】:Delete all content but keeping matched删除所有内容但保持匹配
【发布时间】:2018-01-06 09:06:47
【问题描述】:

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

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

asdas8Isd8m8Td8r
asdia8y8dasd
asd8is88n8gd
asd8t8od8lsdas
as9ea9ad8r1n88r8e87g6765ejasdm8x

并使用此正则表达式:[0-9]([a-z]) 将所有字母组合在一个数字之后并替换为 \1 我会将所有(数字)(字母)替换为(字母)(如果我想删除其余部分并仅保留字母匹配)?...

将此文本转换为

ImTr
y
ing
tol
earnregex

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

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

8I8m8T8r
8y8d
8i8n8g
8t8o8l
9e9a9r1n8r7g5e8x

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

谢谢! :D

【问题讨论】:

  • 你应该改进你的措辞。很难理解你的实际意思。如果您这样做,我们将能够给出更准确的答案。
  • 您确定要在第二行使用y 而不是yd?尝试将(?i-s)[0-9]([a-z])|. 替换为(?{1}$1:)
  • 我正在尝试删除所有文本,但仅保持匹配...
  • 维克托,成功了……坦克!您可以发布解释代码的答案吗?我很乐意给你一个赞成票...你知道如何制作相同的内容,但保留所有匹配的内容吗?像这样8I8m8T8r 8y8d 8i8n8g 8t8o8l 9e9a9r1n8r7g5e8x
  • @Emanuel:看我的回答,正则表达式是一样的,你只需要用$0替换$1(整个匹配)。

标签: regex notepad++


【解决方案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 反向引用,则为整个匹配项)
    • : - 否则……什么都没有
  • ) - 条件替换模式结束。

【讨论】:

  • 非常感谢你! :D
  • 我一次又一次地使用它来匹配多个条件。我不能强调这是多么有用。比你再次维克托!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-02
  • 1970-01-01
  • 2016-04-30
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
相关资源
最近更新 更多