我试图从一个文本中提取字符串,该文本包含两种不同类型的字符。字符是|和#,文本来自外部源。
我举一个例子:
whatsup.
#hello|#what|whatsup|应返回hello|,whatsup
#hello#应返回
|ola|1应返回ola
|hello#|what#whatsup#node应返回hello#和whatsup发布于 2012-05-26 16:09:30
这适用于你的弦乐。我不知道我是否完全理解你需要什么,但我认为如果有必要可以调整它:
String s1 = "#hello|#what|whatsup|";
String s2 = "#hello#";
String s3 = "|ola|1";
String s4 = "|hello#|what#whatsup#node";
Pattern pattern = Pattern.compile("((\\w)+)(\\||#)(\\||#)?");
Matcher matcher = pattern.matcher(s4);
while(matcher.find()) {
System.out.println(matcher.group(1) + (matcher.group(4) != null ? matcher.group(4).equals("|")? "#" : "|" : ""));
matcher.find(); //to jump over the next match
}更新:我刚刚读到了中间层示例。恐怕这不管用,我得离开电脑一段时间。所以这只是为了让你开始。
适用于所有示例的更新版本:
String s1 = "#hello|#what|whatsup|";
String s2 = "#hello#";
String s3 = "|ola|1";
String s4 = "|hello#|what#whatsup#node";
String s5 = "#||##||MiddleRecursion||##||#";
Pattern pattern = Pattern.compile("(#|\\|)((#|\\|)*\\w+(#|\\|)*)(#|\\|)");
Matcher matcher = pattern.matcher(s1);
while(matcher.find()) {
System.out.println(matcher.group(2));
}发布于 2012-05-26 15:30:28
由于#||##||MiddleRecursion||##||# --> ||##||MiddleRecursion||##||,恐怕您必须进行括号匹配。在这种情况下,将没有使用regex的通用解决方案(如果您知道最大的连续出现情况,则可以强制使用regex)。原因是,存在中间递归;正则表达式只能解决左或右递归。
这也是不能用regex解析的原因之一。
发布于 2012-05-26 15:35:16
好吧,我先开始。
所以你必须匹配#something#或者其他的东西
您能编写两个独立的regexp来实现这一点吗?
首先,您会感到烦恼的是,管道|是regexp中的一个神奇字符。如果要匹配该字符,则必须按照我所链接的另一个线程使用\\作为前缀。
当您让这两个regexp工作,让我知道,我会张贴更多。
(我要出去几个小时.)
https://stackoverflow.com/questions/10767408
复制相似问题