正则表达式查找和替换")"在任何匹配" pc(*)"?

时间:2016-09-19 01:25:27

标签: regex multidimensional-array

我正在尝试学习正则表达式以加快编辑程序。

我的程序有数百个对三维数组pc的引用。例如,数组元素可能被称为pc(i+1,j+1,k)pc(i,j+1,k-1)pc(i,j,k)。我需要一个正则表达式来搜索结束括号,以便我可以用" ,1)"替换它。例如,最终目标是将pc(i,j,k)转换为pc(i,j,k,1)

我不需要正则表达式来进行实际替换 - 我甚至不知道是否可能 - 我只是需要它来找到结束括号以便我可以替换它

非常感谢任何帮助或提示!

这里是我将要搜索的代码的摘录:

PpPx_ey = 0.5*( FNy(i,j+1,k) *((pc(i,j+1,k)-pc(i-1,j+1,k))/xdiff(i,j,k)+(pc(i+1,j+1,k)-pc(i,j+1,k))/xdiff(i+1,j,k) )+(1.-FNy(i,j+1,k))*((pc(i,j, k)-pc(i-1,j, k))/xdiff(i,j,k)+(pc(i+1,j ,k)-pc(i,j ,k))/xdiff(i+1,j,k)) )

进一步说明:我使用Atom记事本,它允许在CTRL-F命令中使用正则表达式。我想使用'替换'我CTRL-F的选项,但我需要为该部分使用文字字符串。因此,如果我能找到结尾" )"在使用正则表达式看起来像pc( )的任何内容中,我可以将其替换为" ,1)"。

3 个答案:

答案 0 :(得分:0)

实际上很简单。

这应该适合你:

pc\(.*\)

pc =字面意思pc
\( =已转义(
.* =任何事物 \) =已转义)

答案 1 :(得分:0)

(pc\(.*?)\)
  • ( - 开始一个捕获组。
  • pc - 这与文字pc

  • 相符
  • \( - 匹配左括号。反斜杠逃脱了 括号,因此它不会被解释为a的开头 捕获组。

  • .*? - 懒惰地匹配任何东西。 .将匹配任何一个 字符。 *是一个匹配任何数字的量词(包括 前一个元素的零,在这种情况下为.?导致 前面的量词是懒惰的,这意味着它会匹配 可能的最小字符数。这是阻止匹配的原因 字符串中的pc(i,j+1,k)-pc(i-1,j+1,k) (pc(i,j+1,k)-pc(i-1,j+1,k))/xdiff(i,j,k)作为一个匹配,而不是 两个不同的比赛。

  • ) - 结束捕获组。

  • \) - 与\(相同,但匹配右括号。

如您所述,可以用,1)替换右括号。除了闭合支撑之外的所有东西都被捕获。第一个捕获组通常使用$1\1在替换字符串中引用。所以$1,1)之类的东西应该取代右括号。

答案 2 :(得分:0)

希望这会对你有所帮助!

根据您的问题,您似乎想要找到所有类似, k + or - number)的模式,因此, k+1), k-1), k)应该全部找到并替换。

我写了一个正则表达式,它应该能够满足你,但它并不完美。

就像这样:

import re

s = 'PpPx_ey = 0.5*( FNy(i,j+1,k) *((pc(i,j+1,k)-pc(i-1,j+1,k))/xdiff(i,j,k)+(pc(i+1,j+1,k)-pc(i,j+1,k))/xdiff(i+1, j,k) )+(1.-FNy(i,j+1,k))*((pc(i,j,  k)-pc(i-1,j,  k))/xdiff(i,j,k)+(pc(i+1,j  ,k)-pc(i,j  ,k))/xdiff(i+1,j,k)) )'

print re.findall(',\s*k\s*[\+\-]*\s*\d*\s*\)', s)

com = re.compile(',\s*k\s*[\+\-]*\s*\d*\s*\)')
for i in com.finditer(s):
    print i.start(), i.group()

str_replaced = re.sub(',\s*k\s*[\+\-]*\s*\d*\s*\)', ', 1)', s)
print str_replaced

关键的正则表达式是,\s*k\s*[\+\-]*\s*\d*\s*\),它不完美,因为它会匹配这样的字符串:,k+),这种字符串可能不需要找出或者甚至不存在。

表达式,\s*k\s*[\+\-]*\s*\d*\s*\)表示:它将匹配一个字符串:以,开头,然后可能有也可能没有空格或制表符,那么应该有字母k,然后是否为空白,然后可能有+,或-或根本没有它们,然后空白或不空白,然后可能有一个数字或不,然后空白或不空白,然后结束括号{{1 }}

检查这是否对您有帮助。