我想从字符串中删除所有特殊符号,并且字符串中只有单词
我尝试了这个,但它只给出相同的输出
main() {
String s = "Hello, world! i am 'foo'";
print(s.replaceAll(new RegExp('\W+'),''));
}
输出 :Hello, world! i am 'foo'
预期的 :Hello world i am foo
有两个问题:
-
'\W'
不是有效的转义序列,要在常规字符串文字中定义反斜杠,您需要使用\\
,或使用raw字符串字面量 (r'...'
)
-
\W
正则表达式模式匹配任何不是单词字符(包括空格)的字符,您需要使用带有单词和空格类的否定字符类,[^\w\s]
.
Use
void main() {
String s = "Hello, world! i am 'foo'";
print(s.replaceAll(new RegExp(r'[^\w\s]+'),''));
}
Output: Hello world i am foo
.
完全支持 Unicode 的解决方案
基于javascript 正则表达式匹配任何脚本中所有非单词字符的正确正则表达式范围是什么? https://stackoverflow.com/a/62772689/3832970发帖,牢记\w
在 Unicode 识别正则表达式中等于[\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}]
,您可以在 Dart 中使用以下内容:
void main() {
String s = "Hęllo, wórld! i am 'foo'";
String regex = r'[^\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}\s]+';
print(s.replaceAll(RegExp(regex, unicode: true),''));
}
// => Hęllo wórld i am foo
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)