如果我有这样的文字:
CARBON 1569
1.00% IRON 234
99% CARBON, 1% IRON 181
98.2% CARBON 1% ZINC 181
99% CARBON#1% IRON 141
ASD CARBON 2% IRON RANDOMWORD 23
假设我只想保留元素名称和百分比值(包括数字,小数点和百分比符号)。我可以运行正则表达式替换来做到这一点。我尝试了很多组合,例如(CARBON|IRON|ZINC)
,它替换所有出现的元素名称,以及[^0-9.\%]+
,它保留所有百分比值。 / p>
但是我不知道如何将它们组合在一起,以便我保留两个百分比值和元素名称。任何帮助将不胜感激。
编辑:为了使输出有意义,还需要保留空格。所有不必要的字符都可以用空格替换。预期的输出将是
CARBON 1569
1.00% IRON 234
99% CARBON 1% IRON 181
98.2% CARBON 1% ZINC 181
99% CARBON 1% IRON 141
CARBON 2% IRON 23
答案 0 :(得分:2)
您可以使用此正则表达式匹配所需的文本:
\b(CARBON\b|IRON\b|ZINC\b|\d+(?:\.\d+)?(?:%|\b))|\S
并用'\1 '
代替(将在输入行中添加尾随空格)
正则表达式详细信息:
\b
:单词边界(
:开始捕获组
CARBON\b
:匹配CARBON
,后跟单词边界|
:或IRON\b
:匹配IRON
,后跟单词边界|
:或ZINC\b
:匹配ZINC
,后跟单词边界|
:或\d+(?:\.\d+)?
:匹配整数或浮点数(?:%|\b)
:后跟%
或单词边界)
:|
:或\S
:匹配一个非空白字符答案 1 :(得分:1)
答案 2 :(得分:1)
您可以尝试替换所有单词,除了: *元素名称 *数字 *百分比。
要实现此目的,您可以使用负前瞻:
(?!CARBON|IRON|ZINC|(\d+\.\d+\%)|\d+)\b[a-zA-Z#]+