gpt4 book ai didi

c# - 例如,正则表达式匹配除 'X' 之外的所有字母

转载 作者:行者123 更新时间:2023-12-02 17:58:37 24 4
gpt4 key购买 nike

如何使用正则表达式做这样的事情? :

string myString = "smth there";
foreach (char c in myString)
{
if (char.IsLetter(c) && !c.Equals('X')) return false;
}

我已经尝试过这个:

if (Regex.IsMatch(number, @"[A-Za-z^X]")) return false;

因为 [^X] 是“除 X 之外的所有内容”并且正如预期的那样 - 一如既往,没有任何效果。

最佳答案

您不能使用脱字符号仅否定字符类的一部分。您必须要么否定整个类(通过将^作为类定义中的第一个字符),要么什么都不否定。您可以将正则表达式 [A-WYZ]IgnoreCase 选项结合使用。该字符类仅匹配字符 A-WYZ

或者,您可以使用 character class subtraction 。正则表达式 [A-Z-[X]] 将匹配从 AZ 的所有字符,X 除外。

要匹配完整字符串而不是循环字符,您可以执行 ^[A-Z-[X]]+$。在 [] 之外,脱字号 (^) 匹配字符串的开头,$ 匹配字符串(或行)的结尾如果指定了Multiline选项)

请注意,这与您的 string myString = "smth There"; 不匹配,因为您排除了空格。

Regex.IsMatch("smththere", @"^[A-Z-[X]]+$", RegexOptions.IgnoreCase); // true

Regex.IsMatch("smth there", @"^[A-Z-[X]]+$", RegexOptions.IgnoreCase); // false (because of the space)

Regex.IsMatch("xinthisstring", @"^[A-Z-[X]]+$", RegexOptions.IgnoreCase); // false because x

阿列克谢提出了一个很好的观点below :

Character class is easy - @"^[\w-[X]]+$", it is A-Z that is tricky

您可以使用类中的 -[X] 从字符类中排除字符 'X',但复制 char.isLetter< 的行为 很棘手,因为除了 ASCII 字母之外,char.isLetter 对于所有 unicode 字母都适用。您可以明确指定您的字符类包含 char.isLetter 为 true 的所有 unicode 字母,但这会很乏味。如果您需要处理所有 unicode 字母,那么使用 isLetterc != 'x' 会容易得多。请参阅https://learn.microsoft.com/en-us/dotnet/api/system.char.isletter?view=net-7.0#remarks

关于c# - 例如,正则表达式匹配除 'X' 之外的所有字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74997326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com