【发布时间】:2020-10-01 19:21:44
【问题描述】:
我正在编写从 Fortran 77 到 Fortran 90 的转换脚本,并尝试使用 PERL REGEX 替换每个 !如果在引号内找到,则带有 ~。
这>'Hello !!!! Hello !!!!'变成>'Hello ~~~~ Hello ~~~~'
这>'Hello' !!!! 'Hello !!!!'变成>'Hello' !!!! 'Hello ~~~~'
我不知道如何使用音译,因为它只能在引号中使用 我能做的最好的事情是:
perl -pi -e "s/('.*?)\!+(.*')/\1~\2/g" File.txt
但这会将 4 个!s 替换为 1 个~,甚至不会更改第二组!s
这>'Hello !!!! Hello !!!!'变成>'Hello ~ Hello !!!!'
这>'Hello' !!!! 'Hello !!!!'变成>'Hello' !!!! 'Hello ~'
如果在\! 之后没有+,它只会替换第一个!,所以你会得到'Hello ~!!!'
我似乎无法计算每个! 并将其替换为~。而且我认为全球 /g 会同时获得两组 !s 但没有。
有什么想法吗?
【问题讨论】:
-
有转义字符吗?例如:
'Hello, I can\'t hear you' -
这不是正则表达式擅长的事情。他们不能数,所以没有办法说
\!+应该被相同数量的~替换。 -
输入中的正则表达式只有一个匹配项,因为它匹配引号之间的所有内容。所以它只执行一次替换,即使使用
g修饰符。
标签: regex perl substitution