如何从Dart中的字符串中仅删除符号

ket*_*iwu 6 regex dart flutter

我想从字符串中删除所有特殊符号,并且在字符串中只有单词,我尝试过此操作,但仅给出相同的输出

main() {
    String s = "Hello, world! i am 'foo'";
    print(s.replaceAll(new RegExp('\W+'),'')); 
}
Run Code Online (Sandbox Code Playgroud)

输出:Hello, world! i am 'foo'
预期:Hello world i am foo

Sur*_*gch 16

我发现这个问题在寻找如何从字符串中删除一个符号。对于来到这里想要这样做的其他人:

final myString = 'abc=';
final withoutEquals = myString.replaceAll(RegExp('='), ''); // abc
Run Code Online (Sandbox Code Playgroud)

  • @A.easazadeh,那是因为`.`点字符意味着[匹配任何单个字符](https://medium.com/@suragch/how-to-match-any-single-character-with-a-regular -expression-421b9fc13681) 在正则表达式中。因此,在您的示例中,每个字符都会被匹配和替换。如果您只想匹配文字“.”点,那么您需要将其转义为“RegExp('\\.')”或“RegExp(r'\.')”或“RegExp('[.”)。 ]')`。 (4认同)

And*_*i R 8

从字符串中删除字符“,”:

String myString = "s, t, r";
myString = myString.replaceAll(",", ""); // myString is "s t r"
Run Code Online (Sandbox Code Playgroud)


Has*_*awy 7

第一个解决方案

s.replaceAll(RegExp(",|!|'"), "");    // The | operator works as OR
Run Code Online (Sandbox Code Playgroud)

第二种解决方案

s.replaceAll(",", "").replaceAll("!", "").replaceAll("'", "");
Run Code Online (Sandbox Code Playgroud)


Wik*_*żew 6

有两个问题:

  • '\W'不是有效的转义序列,要在常规字符串文字中定义反斜杠,您需要使用\\或使用原始字符串文字(r'...'
  • \W正则表达式模式匹配不是单词char的任何char,包括空格,您需要对单词和空格类使用否定的字符类[^\w\s]

使用

void main() {
  String s = "Hello, world! i am 'foo'";
  print(s.replaceAll(new RegExp(r'[^\w\s]+'),''));
}
Run Code Online (Sandbox Code Playgroud)

输出: Hello world i am foo

  • @RajeshJr。您可以将其合并为 1 个正则表达式:`.replaceAll(new RegExp(r'(?:_|[^\w\s])+', '')` (3认同)

fil*_*aos 5

RegExp类的文档指出,如果您要以这种方式构造正则表达式,则应使用原始字符串(以r,如前缀的字符串文字r"Hello world")的形式。在使用转义符时,这尤其必要。

另外,您的正则表达式也会捕获空格,因此您需要对其进行修改。您可以RegExp(r"[^\s\w]")改用-匹配任何非空格字符或单词字符