2011-09-06 70 views
0

考虑以下情形如何正确匹配正则表达式匹配?

input string = "WIPR.NS" 

我有 “WIPR2.NS”

我使用下面的逻辑来代替这一点。

match pattern = "(.*)\.NS$" \\ any string that ends with .NS 

replace pattern = "$12.NS" 

在上述情况下,由于没有组指数12,我得到的结果$ 12.NS

但我想什么是“WIPR2.NS”。

如果我没有数字2来替代,它适用于所有其他情况下,但不工作2.

如何解决这种情况?

由于提前, 阿洛克

+0

pattern =“\ .NS $”,replacement =“2.NS” –

回答

0

通常完全取决于你的正则表达式引擎(我不熟悉那些使用$1表示捕获组,我更习惯\1但你必须与此相同的问题)。

有些人会提供一个分隔符,您可以使用,如:

replace pattern = "${1}2.NS" 

这清楚地表明,你要接着字面2.NS捕获组1。


事实上,通过观察this page,似乎是正是来做到这一点(假设.NET):

要与第一逆向引用后面紧跟着数字9替换,请使用${1}9。如果您键入$19,并且少于19个反向引用,则$19将被解释为文本文本,并按照这种方式出现在结果字符串中。


而且记住,周杰伦为那些并不需要在所有的捕捉组此具体使用情况的出色答卷(由刚刚与2.NS更换.NS)。

你可能要考虑的是作为一种可能性 - 在这里我要离开这个答案,因为:

  • 这是公认的答案;
  • 对于更复杂的情况,例如更改X([A-Z])4([A-Z])X${1}5${2}(其中您希望修改的位的任一侧有可变文本)可能更好。
+0

谢谢。那工作得很好。 – Alok

0

您不需要对.NS之前的内容进行任何操作,因为只有正在匹配的内容才会被替换。

match pattern = "\.NS$"(任何与.NS结束串 - 不要忘记逃跑的.
replace pattern = "2.NS"

您可以环视零宽度断言进一步细化这一点,但是这取决于你的正则表达式引擎,而且你还没有指定你工作的环境/编程语言。