我有很多看起来像这样的文本(这是示例):
一些随机的字符串,内容等,没有什么特别的开放XZXDS我希望得到的第一个文字 . 另一个随机字符串,一些不必要的新闻等关闭我希望获得的第二个文本 . 然后更多的内容和内容打开LLXAS第三篇文章,我想得到 . 再次无聊的消息,没有什么关闭我希望得到的第四个文字 . 等等...
我想得到每个包含单词的句子:TEXT . 例如,在这种情况下,我会得到:
我想得到的第一篇文章 . 我希望得到的第二篇文章 . 第三篇文章,我想得到 . 我希望得到的第四篇文章 .
我认为可能的方式是:在我的文本中有随机文本,但是这个文本总是以“打开XXXX”或“关闭”结束 . 所以我认为我可以在“打开XXXX”或“关闭”和“ . ”之间得到我的文字 . (点) . XXX可以不同,需要排除 . somene可以为此帮助正则表达式功能吗?
只要忘记OPENING BY之前的所有内容,在OPENING BY之后排除一个单词,得到我的文本,直到它达到“ . ”
我曾经有类似的东西,但它更容易,因为我得到两个点之间的特定字句 . 我现在的句子之间没有两个点 . 我正在添加以前的代码:
String pattern = "[^\.]*\bSPECIFICWORD\b[^\.]*"
我认为我们可以保留第二部分,但第一部分需要修改 .
我需要它用于我的Java应用程序 . 谢谢你的帮助 .
1 回答
输出:
(?:opening by [^ ]+)|(?:closing))
以"opening by xxx"或"closing"开头(?:[^\\.]*? )*
任何非点字符后跟空格(取决于您的需求空间可以排除)零次或多次(?:[^\\.]*?))\\.
非点序列后跟 .如果文本输入特别大,单个正则表达式可能不是最好的方法,搜索前缀然后明确地点字符可能更快 .
正如评论中所讨论的,如果你想要捕获包含两个单词中任何一个单词的句子,比如ONE或ANOTHER,只需用
(?:ONE|ANOTHER)
替换TEXT . 它在逻辑运算符部分的Pattern docs中进行了描述 .如果你想知道你抓到了哪一个,你可以使用捕获组
(ONE|ANOTHER)
并在_1795761中获取它: