使用正则表达式从预定义句子中提取某些单词

时间:2012-10-15 06:55:34

标签: java regex

我看似简单的任务,但我没有正则表达式的经验 我必须用预定义的消息文本解析SMS正文,以获取某些信息 这是一个例子:

  

Täname! {FirstName} {LastName} isikukoodiga {PersonCode} onsõlminudEMTReisikindlustuse lepingu numbriga {PolicyNumber},mis kehtib alates {CoverStartDate} kell {CoverStartTime} kuni {CoverEndDate} kell {CoverEndTime}(Eestiajajärgi)。后:{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}缺失。而我似乎无法弄清楚问题出在哪里?

5 个答案:

答案 0 :(得分:0)

如何使用这种模式?

\{.*?\}

答案 1 :(得分:0)

简单地使用

会不会更有意义
\{[^{}]*\}

作为你的正则表达式?在字符串中,您需要将其写为

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

<强>解释

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

答案 2 :(得分:0)

答案 3 :(得分:0)

对我来说似乎是正确的。使用DOTALL(以及其他情况下可能是MULTILINE)选项。 DOTALL可以添加为"(?s)Täname!..."。然后".*"也会映射换行字符。

由于之前的比赛被发现,可能就是这样。

答案 4 :(得分:0)

当您在{TERMS}部分中包含括号时,它是否有效? 而不是:

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

你可以尝试:

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

或取决于您在{TERMS}字符串中的内容,您可以将_ 。* _更改为_ [^]] * _ 通过这种方式,您可以找到零到N个字符,而不是结束括号。