我已經創建了一個從開始「結尾是」,例如,正則表達式的正則表達式的字符串的正則表達式:「mynameis」如何限制採取某些詞
「\」(?:[^ \「\ \] |。\\)* \「」。?
現在我想,這個表達式不能採取{我們,我們,他們,以及}話 我如何做到這一點 舉例來說,如果我輸入「mynameisalexand 「 編譯器必須忽略{和}並將此字符串視爲」mynameisalex「
我已經創建了一個從開始「結尾是」,例如,正則表達式的正則表達式的字符串的正則表達式:「mynameis」如何限制採取某些詞
「\」(?:[^ \「\ \] |。\\)* \「」。?
現在我想,這個表達式不能採取{我們,我們,他們,以及}話 我如何做到這一點 舉例來說,如果我輸入「mynameisalexand 「 編譯器必須忽略{和}並將此字符串視爲」mynameisalex「
因爲沒有辦法,以配合正則表達式非連續文本,你仍然可以使用你的正則表達式或展開一個:
"[^"\\]*(?:\\.[^"\\]*)*"
,並刪除你定義的子僅僅是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);
}
之後您需要清理字符串;正則表達式只是不夠強大。
事實上,你得到的是一個上下文無關的語法!如果我們將可接受的令牌稱爲'id',那麼您已經定義了一種看起來像這樣的語言;
id (('and'|'we'|'us') id?)*
也就是說,至少有一個id;那麼字and
,we
或us
,然後另一個可能的ID,也許。整個事情然後重複,讓您匹配
mynameisandrewbutheyarebothcalledsarah
爲 ID:mynameis '和' ID:rewbut '他們' ID:arebothcalledsarah
所以,這是什麼是已知的作爲一種上下文無關語言,正則表達式無法解析這種事情。你最好的選擇是把不可接受的詞分開,最後把它們拼在一起。
如果輸入的是' 「mynamesarealexandandrew」'?它應該是「mynamesarealexrew」嗎? –
是啊!只是作爲一個例子。還有其他的話我會限制。我只是需要一個主意! – Ali
難道你不能在捕獲的字符串上使用通常的字符串操作方法嗎? –