-1

我正在阅读每一行文本,如果它包含某些文本,我会发出警告。在哪里warningsTextBox.Text += 有新行和一个项目符号点,即使条件不满足,它也会插入换行符/项目符号点,所以我最终会得到一些项目符号/空白行以及我的警告。我想出了我放的地方

if ((bomInputTextBox.Text.Contains(s4) && (bomInputTextBox.Text.Contains(s5))))

它会阻止这种情况发生,但事实并非如此。我错过了什么?

using (FileStream fileStream = new FileStream(@"t:\\DESIGNER\\customcheck", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
    using (StreamReader fileReader = new StreamReader(fileStream)) {
        while ((lineOfText = fileReader.ReadLine()) != null) {
            Regex regex4 = new Regex("<ifcontainsand>(.*)</ifcontainsand>");
            var v4 = regex4.Match(lineOfText);
            string s4 = v4.Groups[1].ToString().ToUpper();

            Regex regexContainsAnd = new Regex("<ifcontainsand2>(.*)</ifcontainsand2>");
            var v5 = regexContainsAnd.Match(lineOfText);
            string s5 = v5.Groups[1].ToString().ToUpper();

            Regex regex6 = new Regex("<ifcontainsandWarningText>(.*)</ifcontainsandWarningText>");
            var v6 = regex6.Match(lineOfText);
            string s6 = v6.Groups[1].ToString().ToUpper();

            if ((bomInputTextBox.Text.Contains(s4) && (bomInputTextBox.Text.Contains(s5)))) {
                 warningsTextBox.Text +=
                     (Environment.NewLine + Environment.NewLine + "•" + s6).ToString();
            }
4

1 回答 1

0

最大的问题是您从未真正检查您的任何正则表达式匹配是否成功。当正则表达式匹配不成功时,所有捕获组都是空字符串"";因此,每当您处理lineOfText缺少<ifcontainsand>(.*)</ifcontainsand>and的 a 时<ifcontainsand2>(.*)</ifcontainsand2>,您的if条件就是true(因为所有字符串都包含空字符串)。

要检查匹配是否成功,您可以使用以下Match.Success属性

if (v4.Success && bomInputTextBox.Text.Contains(s4)
    && v5.Success && bomInputTextBox.Text.Contains(s5)) {
于 2013-08-10T02:09:20.603 回答