如何在C#中使用Regex与Non-Ascii字符匹配?

时间:2019-01-31 17:15:20

标签: c# regex

如何匹配4个字符然后跳一个字符(这对我来说是未知的,所以无论是其他中文还是特殊字符的出现)在4个字符之后又跳了一个字符(对我来说是未知的,所以无论如何再例如其他一些中文或特殊字符出现4等。

我的检查字符串:1234 4567 7891 0934 这是16位字符,每个4个字符用空格分隔。

主字符串: “帐号编号名称声明日期付款日期1234 4567 7891 0934 Jane Doe 2009年1月1日02/26/09信用额度可用的新余额最低付款期限信用额。”

上方文本(主字符串)来自PDF文档。是由 OCR 引擎提取的。 因为Main字符串有我的检查字符串,但是它用一些未知的char而不是空格分隔。我尝试在Visual Studio的即时窗口中使用#替换空格。但是Main字符串的check字符串之间的空间没有被替换。因此,我可以说这是非ASCII字符,但看起来像是空格。

我可以通过以下代码摆脱此问题:

 string asAscii = Encoding.ASCII.GetString(
            Encoding.Convert(
                Encoding.UTF8,
                Encoding.GetEncoding(
                    Encoding.ASCII.EncodingName,
                    new EncoderReplacementFallback(string.Empty),
                    new DecoderExceptionFallback()
                    ),
                Encoding.UTF8.GetBytes(inputString)
            )
        );

但是,我想了解Regex解决方案。 即使发生了非ASCII字符,也应与正则表达式匹配以检查是否存在。

1 个答案:

答案 0 :(得分:1)

如果不确定这4位数字之间的字符是否为空格,可以使用与任何字符匹配的.字符,并使用此正则表达式匹配由4个数字组成的组,并用看似未知的角色。

\d{4}.\d{4}.\d{4}.\d{4}

如果要访问这组4位数字,则可以将它们放在组中,并使用此正则表达式中的所有四个分组模式进行访问,

(\d{4}).(\d{4}).(\d{4}).(\d{4})

Check this demo

让我知道您的查询是否仍然无法解决。