我看似简单的任务,但我没有正则表达式的经验 我必须用预定义的消息文本解析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}
缺失。而我似乎无法弄清楚问题出在哪里?
答案 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个字符,而不是结束括号。