正则表达式:匹配模式,改变其中的一部分

正则表达式:匹配模式,改变其中的一部分

如果您有一个文本文件并想要搜索和替换匹配模式的一部分,您将如何使用 perl 单行命令、sed 或 python 来完成?

例如:

"653433,78"

与 匹配[0-9]{6},[0-9]{2}

改成。,.

答案1

您可以使用编号的子组。即:

寻找:

([0-9]{6}),([0-9]{2})

代替:

\1.\2

Python 中的示例:

import re
inp = '653433,78'
out = re.sub(r'([0-9]{6}),([0-9]{2})', r'\1.\2', inp)
print out

这将为你带来:

>>>'653433.78'

答案2

您可以捕获想要替换的模式周围的匹配部分,然后在替换语句中重复使用它。

cat yourfile | perl -p -e "s/([0-9]{6}),([0-9]{2})/\\1.\\2/g"

也可以使用具有前瞻和回顾的更复杂的解决方案(但这不支持您的模式中的通配符,例如 * 和 +)

cat yourfile | perl -p -e "s/(?<=[0-9]{6}),(?=[0-9]{2})/./g"

相关内容