gpt4 book ai didi

java - 在 Java 正则表达式中匹配 Unicode 破折号?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:54:18 25 4
gpt4 key购买 nike

我正在尝试制作一个 Java 正则表达式,以使用 Pattern.split() 将通用格式“foo - bar”的字符串拆分为“foo”和“bar”。 “-”字符可能是几个破折号之一:ASCII“-”、em-dash、en-dash 等。我构建了以下正则表达式:

private static final Pattern titleSegmentSeparator = Pattern.compile("\\s(\\x45|\\u8211|\\u8212|\\u8213|\\u8214)\\s");

如果我正确阅读模式文档,当两边都被空格包围时,应该捕获任何 unicode 破折号或 ascii 破折号。我使用的模式如下:

String[] sectionSegments = titleSegmentSeparator.split(sectionTitle);

没有快乐。对于下面的示例输入,未检测到破折号,并且titleSegmentSeparator.matcher(sectionTitle).find() 返回 false!

为了确保我没有遗漏任何不寻常的字符实体,我使用 System.out 打印了一些调试信息。输出如下——每个字符后面都是(int)char的输出,应该是它的unicode码位吧?

示例输入:

Study Summary (1 of 10) – Competition

S(83)t(116)u(117)d(100)y(121) (32)S(83)u(117)m(109)m(109)a(97)r(114)y(121) (32)((40)1(49) (32)o(111)f(102) (32)1(49)0(48))(41) (32)–(8211) (32)C(67)o(111)m(109)p(112)e(101)t(116)i(105)t(116)i(105)o(111)n(110)

在我看来,破折号是代码点 8211,它应该与正则表达式匹配,但事实并非如此!这是怎么回事?

最佳答案

您混合了十进制 (8211) 和十六进制 (0x8211)。

\x\u 都需要一个十六进制数,因此您需要使用 \u2014 来匹配 em-dash ,而不是 \u8211(和 \x2D 用于普通连字符等)。

但为什么不简单地使用 Unicode 属性“Dash punctuation”呢?

作为 Java 字符串:"\\s\\p{Pd}\\s"

关于java - 在 Java 正则表达式中匹配 Unicode 破折号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3045511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com