繁体   English   中英

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

[英]regex to match substring after nth occurence of pipe character

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

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

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

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

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

这里 n=3

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

正则表达式演示

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

您可以使用 this.Replace by $1<anything> 。参见演示。

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

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

更换方法如下:

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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM