2017-03-26 30 views
-1

我需要一個正則表達式從表單字符串中提取string1,string2和string3: string1.string2'string3。分隔符'。'和'''可能不存在於輸入中。正則表達式:從模式中提取字符串string1.string2'string3其中string1可以包含'。'字符

問題是string1可能包含句點字符'。'。因此最右邊的時間段必須用於提取string1。

有什麼可以幫助的是,可能強加的string2的長度有一個條件:它必須包含3個字母字符,它是一個國家代碼,如USA,JPN。

實施例:

input: Hello -> string1=Hello 
input: Hello.b -> string1=Hello.b 
input: Hello.USA -> string1=Hello, string2=USA 
input: Hello.c.JPN -> string1=Hello.c, string2=JPN 
input: Hello.d.r.USA'Today -> string1=Hello.d.r, string2=USA, string3=Today 
input: Hello.d'Today -> string1=Hello.d, string3=Today 

輸入字符串可以是std::stringstd::wstring

+0

代碼在哪裏?你究竟遇到了什麼問題? – MrEricSir

+0

@MrEricSir這不會很難做的代碼,但由於各種原因,我需要使用C++正則表達式 – Tony

+0

匿名downvoter:這是正則表達式的問題,並建議所有這些問題指定編程語言。 – Tony

回答

1
std::regex re("([^\\.']+(\\.(?![^']{3}('|$))[^\\.']+)*)(\\.([^']{3}))?('(.+))?"); 

Demo

強制性:

一些PEOP當遇到問題時,請考慮「我知道,我會使用正則表達式」。現在他們有兩個問題。 - Jamie Zawinski

+0

謝謝,我會試試看。至於強制性:顯然現在環境也是強制性的,可以讓選民不高興:我正在使用已經大量使用正則表達式的模塊。我的老闆想要正則表達式解決方案。 – Tony

+0

伊戈爾,如果我熟悉C++的正則表達式,我不會問這個問題。您能否在我接受答案之前添加實際提取字符串的代碼,如問題中所述。謝謝。 – Tony

+0

我相信你知道如何關注鏈接。我的答案中有一個。 –