Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 正则表达式删除非字母_Ruby_Regex - Fatal编程技术网

Ruby 正则表达式删除非字母

Ruby 正则表达式删除非字母,ruby,regex,Ruby,Regex,我正在尝试从字符串中删除非字母。这是否可以做到: c = o.replace(o.gsub!(/\W+/, '')) 只要gsub已足够: o.gsub!(/\W+/, '') 注意gsub修改原始o对象。此外,如果o不包含任何非单词字符,结果将是nil,因此使用返回值作为修改的字符串是不可靠的 您可能希望这样: c = o.gsub(/\W+/, '') 删除任何非字母的内容: > " sd 190i.2912390123.aaabbcd".gsub(/[^a-zA-Z]/, '

我正在尝试从字符串中删除非字母。这是否可以做到:

c = o.replace(o.gsub!(/\W+/, ''))

只要
gsub已足够:

o.gsub!(/\W+/, '')
注意
gsub修改原始
o
对象。此外,如果
o
不包含任何非单词字符,结果将是
nil
,因此使用返回值作为修改的字符串是不可靠的

您可能希望这样:

c = o.gsub(/\W+/, '')

删除任何非字母的内容:

> " sd  190i.2912390123.aaabbcd".gsub(/[^a-zA-Z]/, '')
"sdiaaabbcd"

编辑:正如ikegami所指出的,这并不考虑重音字符、元音和其他类似字符。这个问题的解决方案将取决于你所说的“不是一封信”。另外,您的输入将是什么。

这将适用于大多数情况,除非
o
最初不包含任何非字母,在这种情况下
gsub
将返回
nil

如果只需要替换字符串,则可以更简单:

c = o.gsub(/\W+/, '')

如果您有一个字符串,我看不出该
o.replace
用于什么:

string = 't = 4 6 ^'
而你做到了:

string.gsub!(/\W+/, '')
你会得到:

t46
如果您还想删除数字字符,可以执行以下操作:

string.gsub!(/\W+|\d+/, '')
你会得到:

t

使用
\W
\W
仅选择或删除字符无效<代码>\w
表示A-Z、A-Z、0-9和“uz”:

irb(main):002:0>字符=(“”.“\x7e”)。到连接(“”)
=> " !\"\#$%&'()*+,-./0123456789:;?@abcdefghijklmnopqrstuvxyz[\\]^`abcdefghijklmnopqrstuvxyz{124;}”
irb(主):003:0>characters.gsub(/\W+/,“”)
=>“0123456789ABCDefghijklmnopqrstuvxyz_ABCDefghijklmnopqrstuvxyz”
因此,使用
\W
剥离将保留数字和下划线

如果要匹配字符,请使用
/[A-Za-z]+/
,或POSIX字符类
[:alpha:///code>,即
/[:alpha:]+/
,或
/\p{alpha}/

最后一种格式是ASCII中“A'..'Z'+'A'..'Z'的Unicode属性,在处理Unicode时会进行扩展,因此如果您有多字节字符,您可能应该使用它。

使用Regexp#union创建一个大的匹配对象

allowed = Regexp.union(/[a-zA-Z0-9]/, " ", "-", ":", ")", "(", ".")
cleanstring = dirty_string.chars.select {|c| c =~ allowed}.join("")

请记住,ruby将下划线
\uuuu
视为一个单词字符。因此,如果您还想保留下划线,应该这样做

string.gsub!(/\W+/, '')
否则,您需要执行以下操作:

string.gsub!(/[^a-zA-Z]/, '')

你能稍微描述一点吗,你只想要a-z吗?或者空格和某些符号而不是数字吗?Zsbán和Ævar要求有所不同。希望他们不是这家伙软件的用户。另一方面,你是对的。啊哈,gsub修改了原件!这不酷……这样更好吗?我不想修改orignal.copy=original、 converted=copy.gsub!(/\W+/,'')返回converted@newbie:
版本修改了原始版本(这就是
的意思——这是一种“当心,我正在更改你在上面叫我的对象”的标志)。没有
的版本(如我的第二个代码示例)做您想做的事情——它不在原地修改字符串,而是返回一个应用了替换项的副本
string.gsub!(/[^a-zA-Z]/, '')