在第n个管道字符出现后匹配子字符串的正则表达式

时间:2015-05-13 08:58:55

标签: java regex

我正在尝试为下面的示例文本构建一个正则表达式,我需要替换粗体文本。到目前为止,我可以做到这一点 ((\|)).*(\|)选择第一个和最后一个pip char之间的整个字符串。我一定会使用apache或java regex。

示例字符串:管道之间的文本长度可能会有所不同

1.1|ProvCM|111111111111|**10.15.194.25**|10.100.10.3|10.100.10.1|docsis3.0

3 个答案:

答案 0 :(得分:12)

要在nth出现管道后匹配部分,您可以使用此正则表达式:

/^(?:[^|]*\|){3}([^|]*)/

这里n = 3

它将匹配匹配的组#1中的10.15.194.25

RegEx Demo

答案 1 :(得分:3)

^((?:[^|]*\\|){3})[^|]+

您可以$1<anything>使用此。替换。请参阅演示。

https://regex101.com/r/tP7qE7/4

这里从start字符串捕获到|然后捕获3个这样的组并将其存储在$1。字符串的下一部分直到|就是你想要。现在你可以用$1<textyouwant>替换任何东西。

答案 2 :(得分:0)

以下是如何进行替换的方法:

String input = "1.1|ProvCM|111111111111|10.15.194.25|10.100.10.3|10.100.10.1|docsis3.0";
int n = 3;
String newValue = "new value";
String output = input.replaceFirst("^((?:[^|]+\\|){"+n+"})[^|]+", "$1"+newValue);

这构建:

"1.1|ProvCM|111111111111|new value|10.100.10.3|10.100.10.1|docsis3.0"