首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用regex从两种不同类型的字符中提取文本

使用regex从两种不同类型的字符中提取文本
EN

Stack Overflow用户
提问于 2012-05-26 15:15:49
回答 3查看 127关注 0票数 0

我试图从一个文本中提取字符串,该文本包含两种不同类型的字符。字符是|#,文本来自外部源。

我举一个例子:

whatsup.

  • Input:

  • 输入:#hello|#what|whatsup|应返回hello|whatsup

#hello#应返回

  • |ola|1应返回ola

  • Input:|hello#|what#whatsup#node应返回hello#whatsup
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-26 16:09:30

这适用于你的弦乐。我不知道我是否完全理解你需要什么,但我认为如果有必要可以调整它:

代码语言:javascript
复制
     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
     }

更新:我刚刚读到了中间层示例。恐怕这不管用,我得离开电脑一段时间。所以这只是为了让你开始。

适用于所有示例的更新版本:

代码语言:javascript
复制
     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));
     }
票数 0
EN

Stack Overflow用户

发布于 2012-05-26 15:30:28

由于#||##||MiddleRecursion||##||# --> ||##||MiddleRecursion||##||,恐怕您必须进行括号匹配。在这种情况下,将没有使用regex的通用解决方案(如果您知道最大的连续出现情况,则可以强制使用regex)。原因是,存在中间递归;正则表达式只能解决左或右递归。

这也是不能用regex解析的原因之一。

票数 0
EN

Stack Overflow用户

发布于 2012-05-26 15:35:16

好吧,我先开始。

所以你必须匹配#something#或者其他的东西

您能编写两个独立的regexp来实现这一点吗?

首先,您会感到烦恼的是,管道|是regexp中的一个神奇字符。如果要匹配该字符,则必须按照我所链接的另一个线程使用\\作为前缀。

当您让这两个regexp工作,让我知道,我会张贴更多。

(我要出去几个小时.)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10767408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档