[英]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.