0

我正在尝试在 C# 中创建一个正则表达式,它将匹配类似的字符串"�",但我的正则表达式在第一次匹配时停止,我想匹配整个字符串。

我一直在尝试很多方法来做到这一点,目前,我的代码如下所示:

string sPattern = @"/&#\d{2};/";
Regex rExp = new Regex(sPattern);
MatchCollection mcMatches = rExp.Matches(txtInput.Text);
foreach (Match m in mcMatches) {
    if (!m.Success) {
        //Give Warning
    }
}

并且也尝试过lblDebug.Text = Regex.IsMatch(txtInput.Text, "(&#[0-9]{2};)+").ToString();,但它也只找到第一个匹配项。

有小费吗?

编辑:

我正在寻找的最终结果是像现在这样的字符串�&#被标记为不正确,因为只进行了第一个匹配,我的代码将其标记为正确的字符串。

第二次编辑:

我把我的代码改成了这个

string sPattern = @"&#\d{2};";
Regex rExp = new Regex(sPattern);

MatchCollection mcMatches = rExp.Matches(txtInput.Text);
int iMatchCount = 0;
foreach (Match m in mcMatches) {
    if (m.Success) {
        iMatchCount++;
    }
}

int iTotalStrings = txtInput.Text.Length / 5;
int iVerify = txtInput.Text.Length % 5;

if (iTotalStrings == iMatchCount && iVerify == 0) {
    lblDebug.Text = "True";
} else {
    lblDebug.Text = "False";
}

这按我预期的方式工作,但我仍然认为这可以以更好的方式实现。

第三次编辑:正如@devundef 建议的那样,表达式"^(&#\d{2};)+$"完成了我一直在跳的工作,因此,我的最终代码如下所示:

string sPattern = @"^(&#\d{2};)+$";
Regex rExp = new Regex(sPattern);
lblDebug.Text = rExp.IsMatch(txtInput.Text).ToString();

我总是忽略字符串字符(^ / $)的开始和结束。

4

3 回答 3

3

删除/表达式开头和结尾的 。

string sPattern = @"&#\d{2};";

编辑

我测试了该模式,它按预期工作。不确定你想要什么。

两种选择:

&#\d{2};=> 将在字符串中给出 N 个匹配项。在字符串�上,它将匹配 2 个组, �并且

(&#\d{2};)+=> 将整个字符串作为一个单独的组。在字符串�上,它将匹配 1 个组,�

编辑2:

您想要的不是获取组,而是知道字符串的格式是否正确。这是模式:

Regex rExp = new Regex(@"^(&#\d{2};)+$");

var isValid = rExp.IsMatch("�") // isValid = true
var isValid = rExp.IsMatch("�xyz") // isValid = false
于 2012-08-09T19:26:29.400 回答
1

给你:(&#\d{2};)+这应该适用于一次或多次

于 2012-08-09T19:30:09.270 回答
0

(&#\d{2};)*

推荐: http ://www.weitz.de/regex-coach/

于 2012-08-09T19:26:49.650 回答