簡體   English   中英

使用正則表達式從預定義的句子中提取某些單詞

[英]Extract certain words from predefined sentence using regular expression

我的任務看似很簡單,但是我對正則表達式沒有任何經驗。
我必須使用預定義的消息文本來解析SMS正文,以獲取某些信息。
這是一個例子:

塔納姆! {FirstName} {LastName} isikukoodiga {PersonCode}關於EMT Reisikindlustuse lepingu numbriga {PolicyNumber},誤解了{CoverStartDate} kell {CoverStartTime} kuni {CoverEndDate} kell {CoverEndTime}(Eesti ajajä)。 后:{PremiumEur}歐元。 Tutvu tingimustega({Terms}) http://emt.ee/kindlustus Kahjukäsitluse編號+3727330700。

我必須解析花括號中的所有內容。

我用Java想到了這樣的東西:

public static final String REGEX_CONFIRMATION = "Täname! (.*) (.*) isikukoodiga (.*) on sõlminud EMT Reisikindlustuse lepingu numbriga (.*), mis kehtib alates (.*) kell (.*) kuni (.*) kell (.*) \\(Eesti aja järgi\\). Hind: (.*) eurot. Tutvu tingimustega \\((.*)\\) http://emt.ee/kindlustus. Kahjukäsitluse number \\+3727330700.";

但它僅解析以下組:

{MARIS},{PLOTS},{17204046521},{22414152},{01.10.2002},{13:07},{02.10.2002},{23:59}。

如您所見, {Terms}已丟失。 而且我似乎無法弄清楚問題出在哪里?

如何使用這種模式?

\{.*?\}

簡單使用會不會更有意義

\{[^{}]*\}

作為您的正則表達式? 在字符串中,您需要將其寫為

"\\{[^{}]*\\}"

說明:

\{      # Match an opening brace
[^{}]*  # Match any number of characters except braces
\}      # Match a closing brace

對我來說似乎正確。 使用DOTALL(在其他情況下可能是MULTILINE)選項。 可以將DOTALL添加為"(?s)Täname!..." 然后, ".*"也映射換行符。

由於找到了先前的比賽,可能就是這樣。

當您在{TERMS}部分中加入方括號時,它是否有效? 代替:

String regex = "...Tutvu tingimustega \\((.*)\\) http://emt.ee/kindlustus. ...";

您可以嘗試:

String regex = "...Tutvu tingimustega (.*) http://emt.ee/kindlustus. ...";

或根據{TERMS}字符串中的內容,可以將_ 。* _更改為_ [^)] * _這樣,您會發現零至N個不以方括號結尾的字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM