代码之家  ›  专栏  ›  技术社区  ›  rnso

从红色语言的字符串中删除特殊字符

  •  6
  • rnso  · 技术社区  · 7 年前

    我想删除字符串中的所有字符,除了:

    • - _ .
    • A 通过 Z
    • a 通过 z
    • 0 9
    • 空间

    在linux命令行上,使用 sed

    $ echo "testing-#$% yes.no" | sed 's/[^-_.a-zA-Z0-9 ]//g'
    

    testing- yes.no
    

    然而,我无法编纂它。我试过:

    >> parse "mystring%^&" [#a - #z #A - #Z #0 - #9]
    == false
    >> parse "mystring%^&" [#a-#z#A-#Z#0-#9]        
    == false
    
    3 回复  |  直到 7 年前
        1
  •  6
  •   rgchris    7 年前

    首先注意问题之间的区别!还有CHAR!

    #a #b #c  ; issues
    #"a" #"b" #"c"   ; chars
    

    然后,可以为要保留的字符或要丢弃的字符建立字符集(位集!类型)。我们在这里做前者:

    good-chars: charset [#"a" - #"z" #"A" - #"Z" #"0" - #"9"]
    

    现在我们有了这些,我们可以用一些不同的方法来解决这个问题:

    相当基本的解析循环跳过任何 good-chars 并删除任何其他内容。

    parse "mystring%^&" [any [some good-chars | remove skip]]
    

    删除每个

    希望不言而喻:

    remove-each char "mystring%^&" [not find good-chars char]
    
        2
  •  4
  •   rebolek    7 年前

    首先,字符必须在引号中, #a issue! , char! #"a" . 你的规格是对的,但你必须把它传给 charset bitset! 形成它。

    parse 你的绳子, keep skip

    >> chars: charset [#"a" - #"z" #"A" - #"Z" #"0" - #"9"]
    == make bitset! #{000000000000FFC07FFFFFE07FFFFFE0}
    >> rejoin parse "mystring%^&asdf" [collect some [keep chars | skip]]
    == "mystringasdf"
    
        3
  •  2
  •   draegtun    7 年前

    替代解决方案 PARSE REPLACE 这里有一个 COMPLEMENT CHARSET :

    replace/all "mystring%^&" complement charset [{-_. } #"a" - #"z" #"0" - #"9"] {}