【发布时间】:2022-01-18 11:14:53
【问题描述】:
我正在尝试收集所有破折号以在分析原始文本数据时使用它。我发现 Unicode 正则表达式 \p{Pd} 应该匹配所有大小写,但毕竟,这个字符 − 不匹配!
这里是关于这个字符的更多信息: https://www.fileformat.info/info/unicode/char/2212/index.htm
这是错误还是功能?实际上它不是有用的东西。
【问题讨论】:
我正在尝试收集所有破折号以在分析原始文本数据时使用它。我发现 Unicode 正则表达式 \p{Pd} 应该匹配所有大小写,但毕竟,这个字符 − 不匹配!
这里是关于这个字符的更多信息: https://www.fileformat.info/info/unicode/char/2212/index.htm
这是错误还是功能?实际上它不是有用的东西。
【问题讨论】:
Unicode 字符U+2212 MINUS SIGN 是与数学 相关的符号,可能不被视为标点符号;例如,它与\p{Math} 匹配,但与\p{Punctuation} 不匹配(包括\p{Dash_Punctuation})。
您可能想尝试改用\p{Dash},并检查它是否满足您的所有需求...
编辑:
这里是具有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]/
【讨论】:
\p{Dash} 属性并非在所有正则表达式引擎中都可用。但在 JavaScript 中,在 macOS 终端或 Chrome 或 Safari 网络浏览器中运行 node:console.log (/\p{Dash}/u.test ("−")); 返回 true。
/\p{Dash}/u 不起作用。所以,对我来说,正确的实际解决方案仍然是对所有类似连字符的字符使用这个手工制作的表达式:[-‐–—‑‒―−-᠆﹘﹣֊⸺⸻] 或这个,更短但有点垃圾:[\p{Pd}|−]