Вставьте запятую между арабскими (персидскими) и английскими словами в тексте, используя Regex в Python

У меня есть текстовый файл, который содержит 32000 строк. Данные на арабо-персидском языке, однако каждая строка содержит римскую транскрипцию первого слова.

دێان diêyan بنووڕه‌ ‌دگان نگا دگان‌

دێان‌ شكنه diêyan şêkêne دگان‌ شكنه

دیدن дидин بنووڕه‌ ‌دید نگا دید و تركیباتش

Мне нужно поставить запятую до и после римской транскрипции. Я написал это, но после каждого символа римской транскрипции ставится запятая:

import re

output = open("output.txt","w")
input = open("sample.txt").read()

for word in input:
    output.write(re.sub(r'^([a-z])', r',\1', word))


output.close() 

Какие-либо предложения?


person Z Azin    schedule 03.02.2021    source источник


Ответы (2)


Попробуйте это:

re.sub(r'(([a-zêîş]+ ?)+)', r',\1', word))

он выдаст следующий вывод для предоставленного вами образца текста:

دێان ,diêyan بنووڕه‌ ‌دگان نگا دگان‌
دێان‌ شكنه ,diêyan şêkêne دگان‌ شكنه
دیدن ,dîdin بنووڕه‌ ‌دید نگا دید و تركیباتش

Вам нужно будет добавить любые специальные символы, которые могут быть в шаблоне.

person Reza Takhshid    schedule 03.02.2021
comment
Спасибо Реза! Оно работало завораживающе! - person Z Azin; 04.02.2021

Пытаться

re.sub('([a-z].*[a-z])', r',\1,', word)

Выходной файл:

دێان ,diêyan, بنووڕه‌ ‌دگان نگا دگان‌

دێان‌ شكنه ,diêyan şêkêne, دگان‌ شكنه

دیدن ,dîdin, بنووڕه‌ ‌دید نگا دید و تركیباتش

Но слово должно начинаться и заканчиваться на [az].

person Sakurai    schedule 03.02.2021
comment
Это не сработало. ê не римский, но это не важно, потому что стоит в середине слова. Нам нужно только отметить начало и конец слов. - person Z Azin; 03.02.2021
comment
Спасибо! Этот ответ тоже работает! - person Z Azin; 04.02.2021