文本解析的问题,字符看起来像一个更长的'连字符'并具有3个ASCII值

时间:2011-02-06 06:42:46

标签: ruby regex unicode ascii text-parsing

这是恶魔般的角色;检查它我有3个ASCII值:

ASCII code 226 128 147

现在我想了解一下如何在我的正则表达式中使用这个角色。

2 个答案:

答案 0 :(得分:1)

这些都不是ASCII值,因为ASCII范围是0到127,没有更高的值。 UTF-8中的代码点U + 2010 HYPHEN使用您在其中列出的三个字节值编写,如下所示:

$ perl -CS -e 'print "\x{2010}"' | perl -C0 -ne 'printf "%vd\n",$_'
226.128.144

您可以使用the uniprops script获取该代码点的名称和字符属性:

$ uniprops U+2010
U+2010 ‹‐› \N{ HYPHEN }:
    \pP \p{Pd}
    All Any Assigned InGeneralPunctuation Common Zyyy Dash Dash_Punctuation Pd P General_Punctuation Gr_Base Grapheme_Base Graph GrBase Hyphen Punct Pat_Syn Pattern_Syntax PatSyn Print Punctuation

Unicode Dash属性的其他常见代码点包括the unichars script显示的内容:

 $ unichars '\p{Dash}'
 -    45 002D HYPHEN-MINUS
 ‐  8208 2010 HYPHEN
 ‑  8209 2011 NON-BREAKING HYPHEN
 ‒  8210 2012 FIGURE DASH
 –  8211 2013 EN DASH
 —  8212 2014 EM DASH
 ―  8213 2015 HORIZONTAL BAR
 ⁓  8275 2053 SWUNG DASH
 ⁻  8315 207B SUPERSCRIPT MINUS
 ₋  8331 208B SUBSCRIPT MINUS
 −  8722 2212 MINUS SIGN

答案 1 :(得分:0)

它可能是Unicode。正确的答案是始终使用Unicode。你最终会 如果您尝试将Unicode字符串视为ASCII,则会遇到很多麻烦。