Соответствие тире Unicode в регулярных выражениях Java?

Я пытаюсь обработать регулярное выражение Java для разделения строк общего формата "нечто - панель" в "нечто" и "панель" с помощью Pattern.split (). "-" символ может быть одним из нескольких тире: ASCII '-', длинное тире, короткое тире, и т.д. Я создал следующее регулярное выражение:

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 для печати некоторой отладочной информации. Вывод следующим образом - каждый символ сопровождается выводом (международного) символа, который должен быть unicode кодовой точкой it, нет?

Демонстрационный вход:

Изучите сводку (1 из 10) – конкуренция

S (83) т (116) u (117) d (100) год (121) (32) S (83) u (117) м (109) м (109) (97) r (114) год (121) (32) ((40) 1 (49) (32) o (111) f (102) (32) 1 (49) 0 (48)) (41) (32) – (8211) (32) C (67) o (111) м (109) p (112) e (101) т (116) я (105) т (116) я (105) o (111) n (110)

Это смотрит на меня как этот тире, кодовая точка 8211, который должен быть подобран regex, но это не! Что продолжается здесь?

6
задан tchrist 29 March 2012 в 18:50
поделиться

1 ответ

Вы смешиваете десятичное ( 8211 ) и шестнадцатеричное ( 0x8211 ).

\ x и \ u оба ожидают шестнадцатеричное число, поэтому вам нужно будет использовать \ u2014 для соответствия длинному тире, а не \ u8211 \ x2D для обычного дефиса и т. д.).

Но почему бы просто не использовать свойство Unicode «Пунктуация тире»?

В виде строки Java: "\\ s \\ p {Pd} \\ s"

12
ответ дан 9 December 2019 в 20:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: