簡體   English   中英

正則表達式只匹配沒有特殊符號或數字的單詞

[英]Regex to only match words without special symbols or numbers

我想弄清楚如何匹配“單詞”而不是“word1”,“w1ord”或“單詞!”的任何變體。 哪里“!” 可能是“#%!”

基本上我想匹配只使用AZ和az的單詞。 以下不起作用:/

([A-Za-z])\w+

因為“word%5”是匹配的。

你可以用linq做到這一點。 查看ASCII表以查看字符從A到Z的字母值。 你可以在那之后加上你的字符串,只檢查范圍65到90。

bool notOnlyLetters = yourStringValue.ToUpper().Any(x => !(x >= 65 && x <= 90));

要匹配由英文字母組成的整個字符串,請使用LINQ或regex:

var hasAllEnglishLetters = x.All(c => (c >= 65 && c <= 90) || c >=97 && c<= 122));
var hasAllEnglishLetters = Regex.IsMatch(x, @"^[a-zA-Z]+$");

要匹配較大字符串中的單詞,您也可以使用正則表達式或LINQ方法:

var s = "Match word but not word1, w1ord or word!";
var res_linq = s.Split().Where(x => x.All(c => (c >= 65 && c <= 90) || c >=97 && c<= 122));
Console.WriteLine(string.Join(";", res_linq));
// REGEX
var res_regex = Regex.Matches(s, @"(?<!\S)[a-zA-Z]+(?!\S)").Cast<Match>().Select(m=>m.Value);
Console.WriteLine(string.Join(";", res_regex));

請參閱在線C#演示

LINQ方法細節 :使用Split() ,字符串被分成非空白符號塊和.All(c => (c >= 65 && c <= 90) || c >=97 && c<= 122)確保只獲取屬於ASCII字母的那些塊(65到90 - 大寫ASCII字母,97到122是小寫字母)。

正則表達式方法 :如果在[a-zA-Z]+ (或字符串的開頭)之前沒有空格,1個或多個ASCII字母和負向前瞻(?!\\S) ),則(?<!\\S) lookbehind會使匹配失敗(?!\\S)如果字母后面沒有空格(或字符串結尾),則匹配失敗。

以下正則表達式接受包含在以下內容中的每個“單詞”出現:

  • 一行或一個空格的開頭(^|\\s)

  • 一個空的空格或一行的結尾。 (\\s|$)

(^ | \\ S)字(\\ S | $)

如果要查找僅由字母字符組成的每個單詞,可以按如下方式更改正則表達式:

(^ | \\ S)[A-ZA-Z] +(\\ S | $)

暫無
暫無

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

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