【问题标题】:Why Unicode Character 'MINUS SIGN' (U+2212) is NOT in regex unicode group \p{Pd} (Dash_Punctuation)?为什么 Unicode 字符 'MINUS SIGN' (U+2212) 不在正则表达式 unicode 组 \p{Pd} (Dash_Punctuation) 中?
【发布时间】:2022-01-18 11:14:53
【问题描述】:

我正在尝试收集所有破折号以在分析原始文本数据时使用它。我发现 Unicode 正则表达式 \p{Pd} 应该匹配所有大小写,但毕竟,这个字符 不匹配!

这里是关于这个字符的更多信息: https://www.fileformat.info/info/unicode/char/2212/index.htm

这是错误还是功能?实际上它不是有用的东西。

【问题讨论】:

    标签: regex unicode


    【解决方案1】:

    Unicode 字符U+2212 MINUS SIGN 是与数学 相关的符号,可能不被视为标点符号;例如,它与\p{Math} 匹配,但与\p{Punctuation} 不匹配(包括\p{Dash_Punctuation})。

    您可能想尝试改用\p{Dash},并检查它是否满足您的所有需求...

    参考:Properties for U+2212

    编辑

    这里是具有Dash Unicode 属性的所有字符的“官方”列表:https://unicode.org/cldr/utility/list-unicodeset.jsp?a=[:Dash=Yes:],包括U+2212 MINUS SIGN 字符。

    在 Unicode 12.0 中,JavaScript 正则表达式:

    /\p{Dash}/u

    相当于:

    /[\u002D\u058A\u05BE\u1400\u1806\u2010\u2011\u2012\u2013\u2014\u2015\u2053\u207B\u208B\u2212\u2E17\u2E1A\u2E3A\u2E3B\u2E40\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D]/

    【讨论】:

    • 感谢您的回复。问题是没有任何支持的 regex 来匹配 Dash(参见 regular-expressions.info/unicode.html)。所以,真的不清楚使用可用的正则表达式 \p{Pd} 并且不要使用这个来处理这个字符。
    • 可能是\p{Dash} 属性并非在所有正则表达式引擎中都可用。但在 JavaScript 中,在 macOS 终端或 Chrome 或 Safari 网络浏览器中运行 nodeconsole.log (/\p{Dash}/u.test ("−")); 返回 true
    • 编辑了答案,给出了 Unicode 12.0 中被视为破折号的 28 个 Unicode 字符的详尽列表。
    • 很好的链接!它还在方括号中给出了普通的正则表达式,因为在 google re2 中,例如,/\p{Dash}/u 不起作用。所以,对我来说,正确的实际解决方案仍然是对所有类似连字符的字符使用这个手工制作的表达式:[-‐–—‑‒―−-᠆﹘﹣֊⸺⸻] 或这个,更短但有点垃圾:[\p{Pd}|−]
    猜你喜欢
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 2010-09-26
    相关资源
    最近更新 更多