簡體   English   中英

正則表達式和冒號 (:)

[英]Regex and the colon (:)

我有以下代碼。 這個想法是檢測整個單詞。

bool contains = Regex.IsMatch("Hello1 Hello2", @"\bHello\b"); // yields false
bool contains = Regex.IsMatch("Hello Hello2", @"\bHello\b"); // yields true
bool contains = Regex.IsMatch("Hello: Hello2", @"\bHello\b"); **// yields true, but should yield false**

似乎正則表達式忽略了冒號。 如何修改代碼以使最后一行返回 false?

\\b表示“單詞邊界”。 :不是任何單詞的一部分,因此該表達式為true。

也許您想要一個這樣的表達式:

(^|\s)Hello(\s|$)

這意味着: 字符串“ Hello”,其后是表達式的開頭或空白,然后是表達式的結尾或空白。

正則表達式並沒有忽略冒號。 冒號之前的位置是\\b匹配的位置,因為\\b匹配單詞邊界。 這意味着單詞字符和非單詞字符之間的位置。

如果要讓Whitespace在單詞'Hello'之后跟隨,請使用"\\bHello\\s"

要匹配不直接跟有冒號的整個單詞,請使用

\bHello\b(?!:)
\bHello(?![:\w])

請參閱正則表達式演示 詳情

  • \\b - 單詞邊界
  • Hello ——一句話
  • (?![:\\w]) - 如果當前位置右側有:或字符字符,則匹配失敗的負前瞻。

請參閱C# 代碼演示

bool contains = Regex.IsMatch("Hello: Hello2", @"\bHello\b");
Console.WriteLine(contains); // => False
Console.WriteLine(Regex.IsMatch("Hello: Hello2", @"\bHello(?![:\w])"));
// => False

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM