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



我正在学习正则表达式来加快编辑程序的速度。

我的程序有数百个对三维数组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命令中使用正则表达式。我想使用'replace'选项的东西,我CTRL-F,但我需要使用文字字符串的那一部分。因此,如果我能在任何看起来像pc( )的正则表达式中找到结尾")",我可以将其替换为",1)"。

其实很简单。

这个应该可以帮你:

pc(.*)

pc = pc
( =转义(
.* = any
) = escaped )

(pc(.*?))
  • ( -开始抓包组
  • pc -这将匹配文字pc

  • ( -匹配左括号。反斜杠转义括号,这样它就不会被解释为a的开头捕获组。

  • .*? -将惰性匹配任何东西。.将匹配任何单个的性格。*是一个量词,可以匹配任何数字(包括0)的前一个元素,在本例中是.?导致前面的量词是惰性的,这意味着它将匹配尽可能少的字符数。这就是阻止匹配的原因字符串中的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)代替。除了右括号之外的所有内容都被捕获。第一个捕获组通常在使用$11的替换字符串中引用。所以像$1,1)这样的东西应该取代右括号

希望这会对你有所帮助!

根据你的问题,似乎你想找到所有像, 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*ks*[+-]*s*d*s*)', s)
com = re.compile(',s*ks*[+-]*s*d*s*)')
for i in com.finditer(s):
    print i.start(), i.group()
str_replaced = re.sub(',s*ks*[+-]*s*d*s*)', ', 1)', s)
print str_replaced

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

表达式,s*ks*[+-]*s*d*s*)表示:它将匹配一个字符串:从,开始,然后可能有也可能没有空格或制表符,然后应该有字母k,然后可能有空格或制表符,然后可能有+-或根本可能没有它们,然后空白或不,然后可能有数字或不,然后空白或不,然后结束括号)

看看这是否对你有帮助。

相关内容

  • 没有找到相关文章