Ruby-拆分非国际字符之外的非字母数字字符?

时间:2019-03-04 15:52:53

标签: regex ruby

到目前为止,这是我的正则表达式,它将分割成非字母数字字符,包括国际字符(即韩文,日文,中文字符)。

title = '[MV] SUNMI(선미) _ 누아르(Noir)'
title.split(/[^a-zA-Z0-9 ']/)

这是匹配任何国际字符的正则表达式:

[^\x00-\x7F]+

我来自Regular expression to match non-English characters?,我想这是100%正确的(无争议!)

如何合并这2个字符,以便可以拆分非字母数字字符(国际字符除外)?简单的部分就完成了。我只需要以某种方式结合这些正则表达式即可。

我的预期输出将是这样

["MV", "SUNMI", "선미", "누아르", "Noir"]

TLDR:我只想分割非字母数字字符(英文字母,应该 分割外来字符)

2 个答案:

答案 0 :(得分:0)

因此,基本上,您希望分割所有ASCII字符,但非字母字符。您可以使用此正则表达式来选择ascii范围内的所有字符。

[ -@[-`{-~]+

此正则表达式的范围为@,然后忽略所有大写字母,然后从[到反引号中选择所有字符,然后忽略所有小写字母,然后从{到{{1 }},在ascii表中可以看到。

如果要排除扩展的ascii字符,可以使用~更改正则表达式中的~并使用ÿ {-ÿ] +`regex。

Demo

查看这些Ruby代码,

[ -@[-

打印

s = '[MV] SUNMI(선미) _ 누아르(Noir)'
puts s.split(/[ -@\[-`{-~]+/)

Online Ruby Demo

答案 1 :(得分:0)

(?:[^a-zA-Z0-9](?<![^\x00-\x7F]))+

https://regex101.com/r/EDyluc/1

您要保留的内容不匹配(保留为拆分状态)。

解释:

 (?:
      [^a-zA-Z0-9]                  # Not Ascii AlphaNum
      (?<! [^\x00-\x7F] )           # Behind, not not Ascii range (Ascii boundary)
 )+

如果您需要更详细的说明,请告诉我。