我有以下输入字符串

some text ) more text
some text , more text
some text ! more text
some text ; more text
some text ? more text
some text . more text
some text)more text
some text,more text
some text!more text
some text;more text
some text?more text
some text.more text
some text )more text
some text ,more text
some text !more text
some text ;more text
some text ?more text
some text .more text


我正在使用Regex.Replace方法来获取

some text) more text
some text, more text
some text! more text
some text; more text
some text? more text
some text. more text
some text) more text
some text, more text
some text! more text
some text; more text
some text? more text
some text. more text
some text) more text
some text, more text
some text! more text
some text; more text
some text? more text
some text. more text


但是我的弦保持不变。

这是我的课:

public class PunctionationSignsSpaceing : ILanguageRuleFormater
    {
        private string _pattern;
        public PunctionationSignsSpaceing()
        {
            _pattern ="( *[),!;?.] *)";
        }
        public string FormatString(string str)
        {
            str = Regex.Replace(
                str,_pattern,"$1",
                RegexOptions.Multiline|RegexOptions.Compiled
            );
            return str;
        }
    }


我在这里做错什么了吗? (我对regex有点陌生。)
谢谢

最佳答案

您的正则表达式无效。您正在用自己替换整个匹配项,这就是为什么结果字符串没有任何变化的原因。

试试那个:

public class PunctionationSignsSpaceing
{
    private string _pattern;
    public PunctionationSignsSpaceing()
    {
        _pattern = " *([),!;?.]) *";
    }
    public string FormatString(string str)
    {
        str = Regex.Replace(
            str, _pattern, "$1 ",
            RegexOptions.Multiline | RegexOptions.Compiled
        );
        return str;
    }
}


您还应该考虑将_pattern初始化从对象构造函数移至字段本身:

public class PunctionationSignsSpaceing
{
    private string _pattern = " *([),!;?.]) *";

    public string FormatString(string str)
    {
        str = Regex.Replace(
            str, _pattern, "$1 ",
            RegexOptions.Multiline | RegexOptions.Compiled
        );
        return str;
    }
}

关于c# - 正则表达式替换标点符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15863261/

10-12 12:49
查看更多