2017-05-29 101 views
0

我的目標是使用正則表達式實現多行unicode感知的字符串清理。多行正則表達式匹配空格分隔數據後的字符串

我已經從這個表達式,它沒有回顧後開始限制:

(?<=[[:blank:]]).* 

然後,我發現的方式來回顧後限制如下:

(?!.{20,})(?<=[[:blank:]]).* 

它可以在某些情況下, ,但不是很穩定(link),因爲字符串長度不可預測。

也拖尾逗號是不受歡迎的,但我還沒有想出如何用正則表達式去除逗號,因爲它是不可預測的方式(請參閱測試用例)。

如何爲此任務創建適度有限的lookbehind?我使用boost(pcre)風格的正則表達式。

測試用例:

РПÑАВÂРßÛÑ ÛÑРВßР ÛÑÛÑАÑÛ, 11.22 Ø.Á. 
ÛÑРВЛÛÑВ ÛÑßВßДÛÑВßЛ РИÐРÛПÑÑВÛ 11.22 Ã.Ö 
ВßÑÛВÂЛÛÑВ ÛÑВÂÛÑВЛß ßРßÂРÑВЛРÛÐßРВ, 11.22 Â.Ö. 
ÛÑВÛÑВ ÛßÛßРÑВßРÐ ßТАÛ, 11.22 Ã.Ö. 
РÐÑАВПРßÛÑ ÛÑРВßР ÛÑÛÑАÑÛ, 11.22 Ø.р. 
ÛÑРВÂÛÑВ ÛÑßВßДÛÑВß РÂПРÛПÑÑВÛ 11.22 Ø.Á. 
ВßÑÛВДЛÛÑВ ÛÑВЛÛÑВЛß ßРßЛРÑВЛРÛЛßРВ 11.22 Ø.Ö. 
ÛÑВÛÑВ ÛßÛßРÑВßРÐ ßТАÛ, 11.22 Ï.Á. 

РПÑАВÂРßÛÑ ÛÑРВßР ÛÑÛÑАÑÛ 
ÛÑРВЛÛÑВ ÛÑßВßДÛÑВßЛ РИÐРÛПÑÑВÛ 
ВßÑÛВÂЛÛÑВ ÛÑВÂÛÑВЛß ßРßÂРÑВЛРÛÐßРВ 
ÛÑВÛÑВ ÛßÛßРÑВßРÐ ßТАÛ 
РÐÑАВПРßÛÑ ÛÑРВßР ÛÑÛÑАÑÛ 
ÛÑРВÂÛÑВ ÛÑßВßДÛÑВß РÂПРÛПÑÑВÛ 
ВßÑÛВДЛÛÑВ ÛÑВЛÛÑВЛß ßРßЛРÑВЛРÛЛßРВ 
ÛÑВÛÑВ ÛßÛßРÑВßРÐ ßТАÛ 

回答

1

你也可以匹配那些不需要的部分:

\s*[,\d].* 

然後用什麼替代它們(或刪除)在您的環境。

Live demo

0

根據樣本輸出,我想你需要提取的Unicode的任何序列,但不是拉丁字母(\p{L} )或空格(\s)從行首開始擴展到第一個字符不在此類中:

^[\p{L}\s]+ 

演示:https://regex101.com/r/4rFuCC/1

+0

很抱歉,但核電站無法匹配這個表達式和任何給定的測試 –

+0

哦,Notepadd ++做區別。它以有限的方式支持PCRE。特別是,它不支持Unicode類別,包括'L' - 請參閱'\ Pshort name,\ P {name]'[這裏]的註釋(http://docs.notepad-plus-plus.org/index.php/常用表達)。使用NPP,您可以使用'\ w'來匹配包括Unicode在內的字母數字。所以正則表達式可以被重寫爲:^(?:(?!\ d)[\ w \ s])+'。 –

+0

對不起,但這個正則表達式不起作用。由於'^'它試圖從頭開始匹配。 –

相關問題