Добавьте пробел между персидской цифрой и буквой с помощью python re - PullRequest
0 голосов
/ 07 мая 2018

Я хочу добавить пробел между персидским числом и персидской буквой следующим образом:

"سعید 123" преобразовать в "سعید 123"

Java-код этой процедуры приведен ниже.

str.replaceAll("(?<=\\p{IsDigit})(?=\\p{IsAlphabetic})", " ").

Но я не могу найти Python-решение .

Ответы [ 3 ]

0 голосов
/ 07 мая 2018

Вы можете использовать

re.sub(r'([^\W\d_])(\d)', r'\1 \2', s, flags=re.U)

Обратите внимание, что в Python 3.x флаг re.U является избыточным, так как шаблоны по умолчанию поддерживают Unicode.

См. онлайн-демонстрацию Python и демонстрацию regex .

Детали шаблона

  • ([^\W\d_]) - Захват группы 1: любая буква Unicode (буквально, любой символ, кроме символов, не состоящих из слов, цифр или подчеркиваний)
  • (\d) - Группа захвата 2: любая цифра Unicode

Шаблон замены представляет собой комбинацию заполнителей групп 1 и 2 (ссылаясь на соответствующие захваченные значения) с пробелом между ними.

Вы можете использовать вариант регулярного выражения с предвкушением:

re.sub(r'[^\W\d_](?=\d)', r'\g<0> ', s)

См. это демо регулярных выражений .

0 голосов
/ 07 мая 2018

Существует короткое регулярное выражение, на которое вы можете положиться для сопоставления границы между буквами и цифрами (на любом языке):

\d(?=[^_\d\W])|[^_\d\W](?=\d)

Демонстрационная версия

Разбивка :

  • \d Совпадение цифры
  • (?=[^_\d\W]) Перед письмом от языка
  • | или
  • [^_\d\W] Соответствует букве из языка
  • (?=\d) Предшествующая цифра

Python:

re.sub(r'\d(?![_\d\W])|[^_\d\W](?!\D)', r'\g<0> ', str, flags = re.UNICODE)

Но согласно этому ответу , это правильный путь для выполнения этой задачи:

re.sub(r'\d(?=[آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهی])|[آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهی](?=\d)', r'\g<0> ', str,  flags = re.UNICODE)
0 голосов
/ 07 мая 2018

Я не уверен, что это правильный подход.

import re
k = "سعید123"
m = re.search("(\d+)", k)
if m:
    k = " ".join([m.group(), k.replace(m.group(), "")])
    print(k)

Выход:

123 سعید
...