我正在尝试在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();
我总是忽略字符串字符的开头和结尾(^ / $)。 谢谢你的帮助!
答案 0 :(得分: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
答案 1 :(得分:1)
在这里:(&#\d{2};)+
这应该适用于一次或多次
答案 2 :(得分:0)
(&安培;#\ d {2})*