如何获取包含ruby中文字符的整个字符串?

时间:2013-01-12 14:03:59

标签: ruby regex

例如,1.txt

a = "攻击力
非常高"

b = "防御力"
c = "防御力是#{example}"
d = "xyz"

我想要结果:

"攻击力
非常高"

"防御力"

"防御力是#{example}"

没有"xyz",因为它不包含中文字符。

我测试了/(\p{Han}+)/,但这不是我想要的。

提前谢谢。

以下是我的示例:regex example

2 个答案:

答案 0 :(得分:2)

这可能会帮助您:/([^[:ascii:]]+)/一个正则表达式,用于选择输入中的所有非ascii符号。我在你的例子上尝试了它,它确实只选择了中文字符。

您正在搜索的正则表达式可能是:

/("[^"]*[^[:ascii:]]+[^"]*")/

如果我得到了你需要的东西。

我的所作所为:

  • 字符串应以" #"#[^"]*[^[:ascii:]]+[^"]*")
  • 开头
  • 然后有任意数量的非"个字符"#[^"]*#[^[:ascii:]]+[^"]*")
  • 然后至少有一个非ascii符号"[^"]*#[^[:ascii:]]+#[^"]*")
  • 然后有任意数量的非"个字符"[^"]*[^[:ascii:]]+#[^"]*#")
  • 并且应以" "[^"]*[^[:ascii:]]+[^"]*#"#)
  • 结尾

答案 1 :(得分:1)

保持正则表达式尽可能简单:

# encoding: utf-8
a = "攻击力
非常高"

b = "防御力"
c = "防御力是example"
d = "xyz"

puts [a,b,c,d].select{|str| str =~ /\p{Han}/ }
# 攻击力
# 非常高
# 防御力
# 防御力是example

or, in case of one string:

# encoding: utf-8
a = "攻击力非常高
防御力
防御力是example
xyz"
puts a.lines.select{|line| line =~ /\p{Han}/ }.join