如何在正则表达式中使用拉丁扩展字符

本文关键字:丁扩展 扩展 字符 正则表达式 | 更新日期: 2023-09-27 17:55:29

我有包含普通特殊字符和拉丁扩展字符的字符列表。我想使用这些特殊字符作为正则表达式。

Spcl字符列表:

var listAdvSpclChar = File.ReadLines(_spclCharFilePath, Encoding.Default);
StringBuilder sb = new StringBuilder();
foreach (string s in listAdvSpclChar)
{
   sb.Append(s);
}
sb.ToString();

输出:

,.()-"*/#ÃŽ‚¦:'‚°?_+~& ¢¬³¹¼;'=%Æ’º¯…™£$‹“]¾Â`^¡Âµ[ž±<}¨!>¸¥Âœ²©·Â«®Ë„§¤¿Â­¶´†»{|

我想使用上面的 spcl 字符,如下所示

Regex.IsMatch(textString, @"[^" + sb + "]";

我在解析时遇到错误

"[,.()-"*/#ÃŽ‚¦:'‚°?_+~& ¢¬³¹¼ ;'=%Æ’º¯…™£$‹“]¾ `^¡ µ[ž±<}¨!>¸¥ œ²©· «®Ë„§¤¿ ­¶´†»{|]" 
- [x-y] range in reverse order.

如果我向每个字符添加',那么我在解析时会出现错误

"[,'.'(')'-'"'*'/'#'Ã'ƒ'Å'½'‚'Â'¦':'''â'€'š'°'?'_'+'~'&' '¢'¬'³'¹'¼' ';'''='%'Æ'’'º'¯'…'™'£'$'‹'“']'¾' '`'^'¡' 'µ'['ž'±'<'}'¨'!'>'¸'¥' 'œ'²'©'·' '«'®'Ë'„'§'¤'¿' '­'¶'´'†'»'{'|']" 
- Unrecognized escape sequence 'Ã.

我有如下所示的字符串行:

00000001,0020,0000000000Ø00027006,paper tape 19 28°,759,1648.000 ,1648.000 ,,06092014,12319999,000100022404,HALB,18.51 ,100 ,FS,PT-S12DS120-28,00166789,01,00000015,,00166789,M,01
00000001,0050,000000000000027006,paper tape 19 28°,759,2280.000 ,2280.000 ,,08262015,12319999,000100023811,HALB,18.51 ,100 ,FS,S75P306P-3M,00166882,01,00000021,,00166882,M,010

上面的一行包含Ø在我的正则表达式列表中不可用,但我找不到该行作为错误行。

问题是我可以在正则表达式中使用上面的 spcl 字符吗

如何在正则表达式中使用拉丁扩展字符

你只需要转义几个字符,请参阅字符类内的元字符。您可以使用以下代码:

var listAdvSpclChar = File.ReadLines("Your Path", Encoding.Default);
List<string> toEscape = new List<string>()
{
    @"-", 
    @"'",
    @"]",
};
string escape = @"'";
StringBuilder sb = new StringBuilder();
foreach (string s in listAdvSpclChar)
{
    if (toEscape.Contains(s))
    {
        sb.Append(escape);
    }
    sb.Append(s);
}
// And then use it:
Regex.IsMatch("textString", string.Format("[^{0}]", sb));