C#正则表达式 - 如果字符串只包含一个字符

3

使用C#/Regex,我如何查找仅包含逗号而没有字母数字(或其他非逗号)符号的字符串?

a: ',,,,,,,'  match
b: ',,,,,,#A' no match
5个回答

8
[^,]

如果匹配成功,就意味着字符串中包含一个非逗号字符。 更完整的例子:
if (!Regex.IsMatch(yourTestString, "[^,]"))
{
    // This string does NOT contain commas
}

4
这应该可以做到:
var text = ",,,";
Regex.IsMatch(text, @"^,+$");    // true

2

如果我正确理解了你的问题,你想知道一个字符串是否只包含逗号。

如果是这样,可以使用这个正则表达式:^[,]+$

这将仅匹配只包含一个或多个逗号且没有其他字符的字符串。


2

只有逗号的字符串?

Regex.IsMatch(str, @"^,*$");

这将告诉您str是否完全由逗号组成。


Regex.Match() 返回一个 Match 对象,因此您需要检查该对象的 Success 属性以确定它是否起作用。如果您只想要一个是或否的答案,则使用 IsMatch() 更为合适。 - Alan Moore
@Alan 谢谢 :) 我更新了我的答案。(我不懂 C#,只知道正则表达式,但是我觉得我可以查找 C# 语法并回答。我很接近了,对吧?哈哈) - Paul
1
我认为设计Regex对象的人在吸毒。 - Doug Chamberlain

1
我建议,由于一个单字符的正则表达式在最坏情况下总是需要检查其输入字符串的每个字符,因此简单的for循环肯定会更有效率。像这样的代码将以更少的时间和空间提供与任何等效的Regex相同的效果:
private void IsOnlyOneChar(string input, char c)
{
    for (var i = 0; i < input.Length; ++i)
        if (input[i] != c)
            return false;

    return true;
}

虽然这不是你想要的字面上的答案,但在我看来,这是你最优的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接