2016-03-26 53 views
1

我已經創建了一個從開始「結尾是」,例如,正則表達式的正則表達式的字符串的正則表達式:「mynameis」如何限制採取某些詞

「\」(?:[^ \「\ \] |。\\)* \「」。?

現在我想,這個表達式不能採取{我們,我們,他們,以及}話 我如何做到這一點 舉例來說,如果我輸入「mynameisalexand 「 編譯器必須忽略{和}並將此字符串視爲」mynameisalex「

+0

如果輸入的是' 「mynamesarealexandandrew」'?它應該是「mynamesarealexrew」嗎? –

+0

是啊!只是作爲一個例子。還有其他的話我會限制。我只是需要一個主意! – Ali

+0

難道你不能在捕獲的字符串上使用通常的字符串操作方法嗎? –

回答

1

因爲沒有辦法,以配合正則表達式非連續文本,你仍然可以使用你的正則表達式或展開一個:

"[^"\\]*(?:\\.[^"\\]*)*" 

regex demo

,並刪除你定義的子僅僅是String.Replace(或者像we|and|...那樣的正則表達式)。

C# demo

var input = "\"mynamesarealexandandrew\" \"mynameisalexand\""; 
var regex = new Regex(@"""[^""\\]*(?:\\.[^""\\]*)*""", RegexOptions.IgnorePatternWhitespace); 
var results = regex.Matches(input).Cast<Match>() 
        .Select(p => p.Value.Replace("we", "") 
             .Replace("us", "") 
             .Replace("they", "") 
             .Replace("and", "")) 
        .ToList(); 
foreach (var s in results) // DEMO 
{ 
    Console.WriteLine(s); 
} 
0

之後您需要清理字符串;正則表達式只是不夠強大。

事實上,你得到的是一個上下文無關的語法!如果我們將可接受的令牌稱爲'id',那麼您已經定義了一種看起來像這樣的語言;

id (('and'|'we'|'us') id?)* 

也就是說,至少有一個id;那麼字and,weus,然後另一個可能的ID,也許。整個事情然後重複,讓您匹配

mynameisandrewbutheyarebothcalledsarah

爲 ID:mynameis '和' ID:rewbut '他們' ID:arebothcalledsarah

所以,這是什麼是已知的作爲一種上下文無關語言,正則表達式無法解析這種事情。你最好的選擇是把不可接受的詞分開,最後把它們拼在一起。