提问人:Emanuel 提问时间:7/31/2017 最后编辑:TotoEmanuel 更新时间:7/31/2017 访问量:1086
删除所有内容,但保持匹配
Delete all content but keeping matched
问:
如果我有一个很大的文本,并且我需要只保留匹配的内容,我该怎么做?
例如,如果我有这样的文本:
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
答:
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
:
-还。。。无
)
- 条件替换模式的结束。
评论
2赞
Emanuel
7/31/2017
非常感谢盖伊!:D
1赞
user68650
2/4/2020
我一次又一次地使用它来匹配多个标准。我不能强调这是多么有用。比你又维克托!
评论
y
yd
(?i-s)[0-9]([a-z])|.
(?{1}$1:)
8I8m8T8r 8y8d 8i8n8g 8t8o8l 9e9a9r1n8r7g5e8x
$1
$0