2008-10-13 89 views
33

這個問題很容易。正則表達式來判斷一個字符串是否不包含特定字符

我想測試一個字符串是否不包含使用正則表達式的字符。我認爲這個表情的形式是「[^ x]」,其中x是你不想出現的角色,但這似乎不起作用。

例如,

Regex.IsMatch("103","[^0]") 

Regex.IsMatch("103&","[^&]") 

都返回真(我期望假)。

我開始使用"[^&]",也許&需要轉義爲\ &,但似乎沒有什麼區別。

想法?我認爲它很小。

此外,我使用.NET,所以請記住。

EDIT1:

我發現this,但它似乎沒有回答我遇到的問題。

EDIT2:

我想給KevinJoel的建議作出迴應。這些建議確實會更快,但在這種情況下,他們沒有達到我需要的靈活性,所以如果您通過搜索找到了這個問題,那麼一定要看看他們的答案是否符合您的需求。在我的情況下,正則表達式傳遞給一個DataTable驗證方法,該方法循環遍歷每一行,並驗證特定列中該行的內容是否與正在傳入的RegEx相匹配。由於我將重用此方法對於正在驗證等幾個數據表,我想:

  1. 使用正則表達式來實現驗證的範圍最廣,並且
  2. 總是尋找一個積極的匹配(即不是使用的Regex.IsMatch(細胞! ,regexvariable),我想依靠總是能夠使用Regex.IsMatch(cell,regexvariable),因爲調用這個方法的大多數DataTables將使用正匹配而不是負數

希望有幫助。

+0

如果只檢查單個字符的存在,你可以沒有正則表達式會好得多。凱文是正確的:使用.IndexOf()或更簡單。它會更可讀,更清晰,更快速。 – ruquay 2008-10-13 20:08:46

回答

51

您的解決方案是一半的權利。你看到的比賽是其他人物。你想說的話就像是「嗨!我不想在整個字符串中看到這個字符」。

在這種情況下,你做的事:

Regex.IsMatch("103","^[^0]*$") 
+0

謝謝!我也嘗試過「^ [^ 0] $」,但放棄了^和$,因爲它導致所有內容都被評估爲false - 只需要星號即可。再次感謝 - 我的「兩個問題」現在已經迴歸到零。 – jerhinesmith 2008-10-13 19:51:19

+4

我猜這個!Regex.IsMatch(「103」,「0」)實際上會更快。 – Kip 2008-10-13 20:03:12

+0

我正在使用這個,我不想看到字符`?`,````和`]`,我試着`^ [^?] * $`,基於上面的```例如,但是當我添加括號字符時,它不起作用...`^ [^?[]] * $` – raffian 2012-10-10 17:28:24

4

解析器達到第一個字符是「1」,這是真正的[^ 0],也是如此[^ &],因此,它會返回在這兩個例子中都是如此。

7

如果你正在尋找一個字符串中的單個字符,正則表達式似乎有點矯枉過正。爲什麼不使用.IndexOf或.Contains?

2

你把你的否定放在錯誤的地方。 [^x]將匹配任何不是x的東西。如果x在字符串中,那麼如果還有其他字符,字符串仍然與表達式匹配。相反,你想如果x是有匹配真實,然後否定函數的結果:

Not Regex.IsMatch("103", "0") 

Not Regex.IsMatch("103&", "&") 

這並不是說這些簡單的例子,正常String.IndexOf()或String.Contains()會一個更好的選擇。

16

模式[^ 0]將匹配任何不爲零的字符。在這兩個示例中,模式都將匹配第一個字符(「1」)。爲了測試整個字符串是否不包含零,模式應該是「^ [^ 0] * $」。它的內容如下:從字符串的開始處開始,匹配任意數量的不爲零的字符,然後緊接着字符串的末尾。任何包含零的字符串都會失敗。任何不包含零的字符串都會通過。

2

我遇到了這個問題尋找同樣的事情,但對於JavaScript。上面的表達式在我的情況下不起作用,但我遇到了下面的表達式。 (以防萬一其他人尋找一個JavaScript解決方案也在這裏結束了。)

^((?0)。)* $

相關問題