繁体   English   中英

正则表达式获取带有特定单词的句子

[英]Regex get sentence with specific word

我有很多看起来像这样的文字(这是示例):

一些随机的字符串,内容等,没有什么特别的OPENING BY XZXDS我想得到的第一个文本。 另一个随机字符串,一些不必要的新闻等。关闭第二个我想要的文本。 然后我想获得更多内容和内容OPENX BY LLXAS。 再次无聊的新闻,我希望得到的第四封文字都没有结束。 等等...

我想得到每个包含单词的句子:TEXT。 例如,在这种情况下,我将得到:

我想得到的第一个文本。

我想得到的第二个文本。

我想得到的第三条文字。

我想得到的第四个文本。

我认为可能的方式是:在我的文本中有随机文本,但是此文本始终以“ OPENING BY XXXX”或“ CLOSING”结尾。 因此,我认为我可以得到介于“ OPENING BY XXXX”或“ CLOSING”与“”之间的文本。 (点)。 XXX可以不同,需要排除。 可以为正则表达式功能提供帮助吗?

只需排除OPENING BY之前的所有内容,排除OPENING BY之后的一个单词,得到我的文字,直到达到“”为止。

我曾经有过类似的东西,但是它更容易,因为我得到了两个点之间带有特定单词的句子。 现在我的句子之间没有两个点。 我正在添加以前的代码:

String pattern = "[^\.]*\bSPECIFICWORD\b[^\.]*"

我认为我们可以保留第二部分,但是第一部分需要修改。

我的Java应用程序需要它。 谢谢你的帮助。

    Pattern p = Pattern.compile("(?:(?:opening by [^ ]+)|(?:closing))"
            + "((?:[^\\.]*? )*TEXT(?:[^\\.]*?))\\."
            , Pattern.CASE_INSENSITIVE);
    final String text = "random text random text random text opening "
            + "by xysd FIRST TEXT I WANT TO GET. random text random "
            + "text random text closing SECOND TEXT I WANT TO GET. "
            + "random text random text random text opening by lxcvznk "
            + "THIRD TEXT. random text random text random text random "
            + "text closing FOURTH TEXT...etc";
    Matcher m = p.matcher(text);
    while(m.find())
    {
        System.out.println(m.group(1));
    }

输出:

 FIRST TEXT I WANT TO GET
 SECOND TEXT I WANT TO GET
 THIRD TEXT
 FOURTH TEXT

(?:opening by [^ ]+)|(?:closing))以“以xxx开头”或“关闭”开头

(?:[^\\\\.]*? )*任何非点字符后跟空格(取决于您的需要,可以排除空格)零次或多次

(?:[^\\\\.]*?))\\\\. 非点序列,后跟。

如果文本输入非常大,则单个正则表达式可能不是最佳方法,搜索前缀然后显式点字符可能更快。

如评论中所述,如果要捕获包含两个单词中的任何一个的句子,例如ONE或ANOTHER,只需将TEXT替换为(?:ONE|ANOTHER) 在“逻辑运算符”部分的“ 模式”文档中对此进行了描述。

如果您想知道您到底捕获了哪个,可以使用捕获组(ONE|ANOTHER)并将其放入matcher.group(2)

    Pattern p = Pattern.compile("(?:(?:opening by [^ ]+)|(?:closing))"
            + "((?:[^\\.]*? )*(ONE|ANOTHER)(?:[^\\.]*?))\\."
            , Pattern.CASE_INSENSITIVE);
    final String text = "random text random text random text opening "
            + "by xysd FIRST ONE I WANT TO GET. random text random "
            + "text random text closing SECOND ANOTHER I WANT TO GET. "
            + "random text random text random text opening by lxcvznk "
            + "ANOTHER TEXT. random text random text random text random "
            + "text closing FOURTH ONE...etc";
    Matcher m = p.matcher(text);
    while(m.find())
    {
        System.out.println(m.group(1) + "<-" + m.group(2));
    }

FIRST ONE I WANT TO GET<-ONE
SECOND ANOTHER I WANT TO GET<-ANOTHER
ANOTHER TEXT<-ANOTHER
FOURTH ONE<-ONE

暂无
暂无

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

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