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