【问题标题】:Enclose greek sentence between tag or find and replace part of sentence that contains greek characters将希腊句子括在标签之间或查找并替换包含希腊字符的句子部分
【发布时间】:2021-08-07 09:34:30
【问题描述】:

我正在尝试找到一种方法来使用特殊标签中的希腊字符将句子括起来(在这种情况下是 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'

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

【问题讨论】:

    标签: python regex unicode


    【解决方案1】:

    使用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'
    

    【讨论】:

    • 这似乎是一个非常好的解决方案,比我的要好得多,非常感谢!我不知道 \p{Greek} 找到所有带有希腊 unicode 的单词,我会等几天才能接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 2012-05-16
    • 2016-04-02
    • 2013-09-30
    • 2023-03-17
    • 1970-01-01
    • 2017-07-22
    相关资源
    最近更新 更多