我有一个字符串,需要一个正则表达式来从字符串中提取子字符串。
示例:a|b|c|d, e|f|g|h
结果:Pattern ptyy = Pattern.compile("\\|*.+? ");
Matcher matcher_values = ptyy.matcher("this is a|b|c|d whatever e|f|g|h");
while (matcher_values.find()) {
String line = matcher_values.group(0);
System.out.println(line);
}
但是根据我编写的Java代码,它产生的结果如下:
this
is
a|b|c|d
whatever
结果
set
结果不是我所希望的。有什么建议吗?
答案 0 :(得分:2)
答案 1 :(得分:1)
您的a
模式匹配0个或更多个管道,然后是1个或更多个除了换行符之外的任何字符,直到第一个空格。因此,它匹配字符串中的几乎所有非空格块。
如果b
,c
和[^\s|]+(?:\|[^\s|])+
只是占位符,并且可能存在任何非空白字符,我建议:
[^\s|]+
请参阅regex demo
<强>详情:
|
- 除了空格和(?:\|[^\s|])+
\|
- 1个或多个序列:
|
- 文字[^\s|]
|
- 除了空格和Pattern ptyy = Pattern.compile("[^\\s|]+(?:\\|[^\\s|])+");
Matcher matcher_values = ptyy.matcher("this is a|b|c|d whatever e|f|g|h");
while (matcher_values.find()) {
String line = matcher_values.group(0);
System.out.println(line);
}
final String x = "abc_123_456_defgh_ijkl_mnop_qr";
final String[] xw = x.split("_");
for (final String s : xw) {
System.out.println(s);
}
答案 2 :(得分:0)
根据你的建议,我设法提出了我自己的正则表达式,可以解决管道表达式的不同组合。
*focusnode
这将使我能够得到结果
*parent.left
谢谢大家!