C# 正则表达式:单个单词
如果用户输入是一个单词,我想签入一个C#程序。单词my只有A-Z和A-Z两个字符。没有空格或其他字符。 我尝试了C# 正则表达式:单个单词,c#,.net,regex,C#,.net,Regex,如果用户输入是一个单词,我想签入一个C#程序。单词my只有A-Z和A-Z两个字符。没有空格或其他字符。 我尝试了[A-Za-z]*,但这不起作用。这个表达有什么不对 Regex regex = new Regex("[A-Za-z]*"); if (!regex.IsMatch(userinput);) { ... } 你能推荐一个包含正则表达式示例的综合列表吗 我不知道C#的regex语法是什么,但是试试[A-Za-z]+你应该为字符串的开头和结尾添加锚定:^[A-Za-z]+$关于re
[A-Za-z]*
,但这不起作用。这个表达有什么不对
Regex regex = new Regex("[A-Za-z]*");
if (!regex.IsMatch(userinput);)
{
...
}
你能推荐一个包含正则表达式示例的综合列表吗 我不知道C#的regex语法是什么,但是试试
[A-Za-z]+
你应该为字符串的开头和结尾添加锚定:^[A-Za-z]+$
关于regex示例的问题,请看一看
对于正则表达式,请查看表示字符串开头和结尾的特殊字符
^
和$
。在将来构造正则表达式时,它可能会派上用场。它可能会工作,但您没有锚定正则表达式。您需要分别使用^
和$
将表达式锚定到字符串的开头和结尾:
Regex regex = new Regex("^[A-Za-z]+$");
我还将
*
更改为+
,因为*
将匹配0次或更多次,而+
将匹配1次或更多次。正则表达式中的星号字符指定“前面的字符类为零或更多”
这解释了表达式失败的原因,因为如果字符串包含零个或多个字母,则表达式将成功
您可能打算使用一个或多个字母,在这种情况下,您应该使用加号而不是星号
进行了更改后,如果您输入的字符串不包含任何字母(如您所希望的),那么它将失败
但是,这仍然不能完全适用于您,因为它将允许字符串中包含其他字符。如果要将其仅限于字母,而不限于其他内容,则需要在正则表达式中提供起始和结束锚点(^
和$
),以使表达式检查“一个或多个字母”是否附加到字符串的起始和结束
^[a-zA-Z]+$
这应该按预期工作
希望有帮助
关于regex的更多信息,我推荐它作为一个很好的参考站点。尝试
^[a-Za-z]+$
如果你没有包含^$
,它将匹配字符串中包含字母字符的任何部分。其他人已经写了如何解决你知道的问题。现在我来谈谈你可能不知道的问题:变音符号:-)你的解决方案不支持èèèù和许多其他字母。正确的解决办法是:
^(\p{L}\p{M}*)+$
其中,
\p{L}
是任何字母加上\p{M}*
,即0个或多个变音符号(在unicode中,变音符号可以与基本字母“分离”,因此可以有类似于a+`=a
的内容,也可以有类似标准a
的预合成字符)如果您只需要字符a-zA-Z
,只需对字符进行迭代,然后比较单个字符(如果它们在您的范围内)
例如:
对于每个字符c:
('a'我知道问题只是关于严格的字母输入,但这里有一个有趣的解决方法,它不会打断重音字母和其他此类特殊字符
正则表达式“^\b.+?\b”将匹配字符串开头的第一个单词,但仅当字符串实际以有效的单词字符开头时才匹配。使用该正则表达式,您只需检查a)字符串是否匹配,以及b)匹配字符串的长度是否等于整个字符串的长度:
public Boolean IsSingleWord(String userInput)
{
Regex firstWordRegex = new Regex("^\\b.+?\\b");
Match firstWordMatch = firstWordRegex.Match(userInput);
return firstWordMatch.Success && firstWordMatch.Length == userInput.Length;
}
请记住,您正在删除èèèù…什么是考虑到国际字符的[a-Za-z]
的好替代品?另一方面,我认为我应该使表达式不区分大小写,而不是在这种情况下重复字符范围。@Svish我发布的答案应该处理这种情况。