簡體   English   中英

如何使用正則表達式匹配不以某些字符開頭或結尾的單詞?

[英]How to match words that doesn't start nor end with certain characters using Regex?

我想找到不以某些特定字符開頭或結尾的單詞匹配。

例如,我有這個輸入,我只想匹配突出顯示的單詞:

“字符串”字符串“字符串”

並排除其他以"'開頭和結尾的單詞。

我目前正在使用這種模式:

在此處輸入圖像描述

但是我不知道應該使用什么模式來排除以某些指定字符開頭和結尾的單詞。

有人可以就我應該使用什么模式給我一些建議嗎? 謝謝

您當前使用的模式匹配,因為\b正確斷言了"sg"之間的位置(單詞字符[a-zA-Z0-9_]和非單詞字符之間的 position)。 您可以使用以下方法之一:

  1. 否定特定字符(否定后視/前瞻)
    • 此方法允許您指定一個字符、一組字符或 substring 以從匹配中求反。
    • (?<?['"])\bstring\b(?!['"]) -在此處查看它的使用情況
      • (?<!['"]) - 確保"不在前面。
      • (?!['"]) - 確保"不會繼續。
  2. 允許特定字符(正向向后看/向前看)
    • 此方法允許您指定一個字符、一組字符或 substring 以確保匹配。
    • (?<=\s|^)\bstring\b(?=\s|$) -在此處查看它的使用情況
      • (?<=\s|^) - 確保空格或行首在前。
      • (?=\s|$) - 確保空格或行尾繼續。
  3. 以上兩者的結合
    • 此方法允許您否定特定情況,同時允許其他情況(不常用,也不是所提出的問題真正需要的,但可能對您或其他人有用。
    • (?<=\s|^)string(??\s+(?!stop)|$)之類的東西會確保單詞后面沒有單詞stop
    • (?<=(?<?stop\s*)\s+|^)string(?=\s+|$)之類的東西會確保單詞不跟隨單詞stop - 請注意后視中的量詞( \s+ )在大多數正則表達式引擎中是不允許的,.NET 允許它。
    • (?<=\s|^)\bstring\b(?=\s|$)(?!\z)之類的東西會確保單詞不在字符串的末尾(如果多行)。

如果它在空格之間,此正則表達式將選擇字符串\sstring\s

var sample = "\"string\" string \"string\" astring 'string_ string?string string ";
var regx = new Regex(@"\sstring\s");
var matches = regx.Matches(sample);
foreach (Match mt in matches)
{
    Console.WriteLine($"{mt.Value} {mt.Index,3} {mt.Length,3}");
}

暫無
暫無

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

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