【发布时间】:2011-04-04 17:31:14
【问题描述】:
【问题讨论】:
-
这可能很重要。 .NET 正则表达式函数具有多行选项。没有一个答案能解决这个问题(即使它的默认值可能就足够了)。
标签: regex
【问题讨论】:
标签: regex
使用字符类:[ \t]
【讨论】:
\h 字符类,但它确实显示还有许多其他空白字符,以防您需要将它们添加到此处的列表中。
\t前面为什么要加空格?
试试这个字符集:
[ \t]
这仅匹配空格或制表符。
【讨论】:
作为Eiríkr Útlendi noted,可接受的解决方案仅考虑两个空白字符:水平制表符 (U+0009) 和分隔空格 (U+0020)。它不考虑其他空白字符,例如不间断空格(恰好在我要处理的文本中)。
更完整的空白字符列表包含在on Wikipedia 中,并且在linked Perl answer 中也有引用。可以使用 character class subtraction 构建一个简单的 C# 解决方案来解释这些其他字符:
[\s-[\r\n]]
或者,包括 Eiríkr Útlendi 的解决方案,你会得到
[\s\u3000-[\r\n]]
【讨论】:
注意:对于处理CJK 文本(中文、日文和韩文)的人,不包括双字节空格(Unicode \u3000)在\s 中,对于我迄今为止尝试过的任何实现(Perl、.NET、PCRE 和 Python)。您需要先规范化您的字符串(例如将所有\u3000 替换为\u0020),或者您必须使用包含此代码点的字符集以及您使用的任何其他空格定位,例如[ \t\u3000]。
如果您使用 Perl 或 PCRE,您可以选择使用 \h 简写 水平空白,它似乎包括单字节空间、双字节空间和选项卡等。详情请参阅Match whitespace but not newlines (Perl) 问题。
但是,据我所知,这个 \h 简写还没有为 .NET 和 C# 实现。
【讨论】:
\h(在 Java 8 中引入)确实包含 \u3000,但 \s 不包含,除非您设置 UNICODE_CHARACTER_CLASS 模式(在 Java 7 中引入)。
如果你想替换 空格,下面的代码在 C# 中对我有用。
Regex.Replace(Line, "\\\s", "");
标签页
Regex.Replace(Line, "\\\s\\\s", "");
【讨论】: