python - 将希腊语句子括在标签之间或查找并替换包含希腊语字符的句子部分

标签 python regex unicode

我正在尝试找到一种方法,将使用希腊字符的句子括在特殊标签中(在本例中为 LaTeX,但这并不重要)。因此,鉴于我的输入文本:

inputtext = "some english text ῍Ενθεσις τοῦ Ψαλτής and then english again"

我想实现这个:

results = "some english text \textgreek{῍Ενθεσις τοῦ Ψαλτής} and then english again"

几个小时后,我想出了这个几乎可行的解决方案:

import re 
inputtext = "some english text ῍Ενθεσις τοῦ Ψαλτής and then english again" 
t = re.findall('[α-ωΑ-Ω]',inputtext) 
beg = inputtext.find(t[0]) 
end = inputtext.rfind(t[-1]) + 1 
results = "".join((inputtext[:beg]+"\textgreek{"+inputtext[beg:end]+"}"+inputtext[end:]))


In [50]: results                                                                                  
Out[50]: 'some english text ῍\textgreek{Ενθεσις τοῦ Ψαλτής} and then english again'

然后我就想到了这个话题,有没有更好的解决方案?也许只使用正则表达式? 当前的解决方案似乎忽略了多调希腊语字符,当然它仅在每个句子只有一个希腊语句子的情况下才有效。

最佳答案

regex模块:

>>> s = "some english text ῍Ενθεσις τοῦ Ψαλτής and then english again"
>>> regex.sub(r'\p{Greek}+(\s+\p{Greek}+)*', r'\textgreek{\g<0>}', s)
'some english text \textgreek{῍Ενθεσις τοῦ Ψαλτής} and then english again'

这是基于给定的示例,不确定如何处理非希腊标点符号等字符。


如果Greek_and_CopticGreek_Extended拥有您想要匹配的所有字符,那么您可以手动构造字符范围,从而使用 re 模块本身:

>>> s = "some english text ῍Ενθεσις τοῦ Ψαλτής and then english again"
>>> re.sub(r'[\u0370-\u03ff\u1f00-\u1fff]+(\s+[\u0370-\u03ff\u1f00-\u1fff]+)*', r'\textgreek{\g<0>}', s)
'some english text \textgreek{῍Ενθεσις τοῦ Ψαλτής} and then english again'

关于python - 将希腊语句子括在标签之间或查找并替换包含希腊语字符的句子部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67581267/

相关文章:

python - 如何将 Amazon S3 存储桶中的 URL 存储在 Django sqlite 数据库中以进行显示和评论?

python - Python 中 str.replace 函数的大 O 表示法是什么?

swift - 如何从开头和结尾包含 # 且末尾不包含空格的字符串中获取主题标签?

mysql - 将 String 替换为 Regexp 以获取从 Robot 框架中的 MySQL Query 获取的值

python - 列表/序列的正则表达式模拟

c - 是否有将 Unicode 代码点转换为 UTF-8 的 C 库?

unicode - Windows ASCII 字符/HTML 实体/Unicode

python - 如何在 Django 中为第 3 方 REST 服务进行分页/分页

python - 根据数据框中组内的条件替换值

c++ - 读取 Unicode 文件