我正在尝试找到一种方法,将使用希腊字符的句子括在特殊标签中(在本例中为 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_Coptic和 Greek_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/