从红色语言的字符串中删除特殊字符
Remove special characters from string in Red language
我想删除字符串中的所有字符,除了:
-
或 _
或 .
A
至 Z
a
至 z
0
到 9
- space
在 linux 命令行上,使用 sed
我会这样做:
$ echo "testing-#$% yes.no" | sed 's/[^-_.a-zA-Z0-9 ]//g'
输出:
testing- yes.no
如何使用 PARSE 在 Red 语言中实现相同的效果?我看了:
- http://www.rebol.com/docs/core23/rebolcore-15.html#section-1
- http://rebol-land.blogspot.in/2013/03/rebols-answer-to-regex-parse-and-rebol.html
- http://ross-gill.com/page/Beyond_Regular_Expressions
但是,我无法将其编纂。我试过了:
>> parse "mystring%^&" [#a - #z #A - #Z #0 - #9]
== false
>> parse "mystring%^&" [#a-#z#A-#Z#0-#9]
== false
首先注意ISSUE的区别!和 CHAR!
#a #b #c ; issues
#"a" #"b" #"c" ; chars
然后您可以为要保留的字符或要丢弃的字符建立一个字符集(BITSET!类型)。我们将在这里做前者:
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]
首先,字符必须在引号内,#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"
PARSE
的替代解决方案是使用 REPLACE
here with a COMPLEMENT
CHARSET
:
replace/all "mystring%^&" complement charset [{-_. } #"a" - #"z" #"0" - #"9"] {}
注意。以上在 Rebol (2 & 3) 中有效。不幸的是,它目前以红色挂起(在 MacOS 上的 0.63 上测试)。
我想删除字符串中的所有字符,除了:
-
或_
或.
A
至Z
a
至z
0
到9
- space
在 linux 命令行上,使用 sed
我会这样做:
$ echo "testing-#$% yes.no" | sed 's/[^-_.a-zA-Z0-9 ]//g'
输出:
testing- yes.no
如何使用 PARSE 在 Red 语言中实现相同的效果?我看了:
- http://www.rebol.com/docs/core23/rebolcore-15.html#section-1
- http://rebol-land.blogspot.in/2013/03/rebols-answer-to-regex-parse-and-rebol.html
- http://ross-gill.com/page/Beyond_Regular_Expressions
但是,我无法将其编纂。我试过了:
>> parse "mystring%^&" [#a - #z #A - #Z #0 - #9]
== false
>> parse "mystring%^&" [#a-#z#A-#Z#0-#9]
== false
首先注意ISSUE的区别!和 CHAR!
#a #b #c ; issues
#"a" #"b" #"c" ; chars
然后您可以为要保留的字符或要丢弃的字符建立一个字符集(BITSET!类型)。我们将在这里做前者:
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]
首先,字符必须在引号内,#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"
PARSE
的替代解决方案是使用 REPLACE
here with a COMPLEMENT
CHARSET
:
replace/all "mystring%^&" complement charset [{-_. } #"a" - #"z" #"0" - #"9"] {}
注意。以上在 Rebol (2 & 3) 中有效。不幸的是,它目前以红色挂起(在 MacOS 上的 0.63 上测试)。