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