2

例えば、1.txt

a = "攻击力
非常高"

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

結果が欲しい:

"攻击力
非常高"

"防御力"

"防御力是#{example}"

"xyz"漢字が入っていないのでありません。

私はテスト しまし/(\p{Han}+)/たが、それは私が望むものではありません。

前もって感謝します。

これが私の例です:正規表現の例

4

2 に答える 2

2

これはあなたを助けるかもしれません:/([^[:ascii:]]+)/入力内のすべての非ASCII記号を選択する正規表現。あなたの例で試してみましたが、実際には漢字のみが選択されます。

あなたが探している正規表現はおそらく次のとおりです。

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

私があなたが必要とするものを正しく手に入れたら。

私がやること:

  • 文字列は次で始まる必要があります" #"#[^"]*[^[:ascii:]]+[^"]*")
  • 次に、任意の数の非"文字があります"#[^"]*#[^[:ascii:]]+[^"]*")
  • 次に、少なくとも 1 つの非 ASCII シンボル"[^"]*#[^[:ascii:]]+#[^"]*")
  • 次に、任意の数の非"文字があります"[^"]*[^[:ascii:]]+#[^"]*#")
  • そして、で終わる必要があります" "[^"]*[^[:ascii:]]+[^"]*#"#)
于 2013-01-12T14:14:05.283 に答える
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
于 2013-01-12T15:57:10.057 に答える