Python正则表达式希腊字符[重复]

Posted

技术标签:

【中文标题】Python正则表达式希腊字符[重复]【英文标题】:Python regex greek characters [duplicate] 【发布时间】:2020-10-16 22:30:33 【问题描述】:

我有一些具有这种结构的字符串:<name> (<unit>)。我想提取nameunit;为了执行这个任务,我使用regex,在大多数情况下都很好。 但是,在某些情况下,<unit> 由希腊字符组成,例如 Ω。在这些情况下,我的代码无法提取所需的两个部分。 这是我的代码:

import re

def name_unit_split(text):
    name = re.split(' \([A-Za-z]*\)', text)[0]
    unit = re.findall('\([A-Za-z]*\)', text)

    if unit != []:
        unit = unit[0][1:-1]
    else:
        unit = ''

    return name, unit

print(name_unit_split('distance (mm)'))

我得到:

('distance', 'mm')

但是当我尝试:

print(name_unit_split('resistance (Ω)'))

我明白了:

('resistance (Ω)', '')

我搜索了其他正则表达式占位符并尝试使用这些,但没有成功:

name = re.split(' \([\pGreek]*\)', text)[0]
unit = re.findall('\([\pGreek]*\)', text)

如何使用regex在字符串中查找希腊字符(一个或多个,分组)? 此外,有没有更好的方法来使用regex 执行上述任务?我的意思是:有一种方法可以同时提取<name><unit> 并将它们保存在nameunitregex 中?

【问题讨论】:

【参考方案1】:

就像拉丁字母一样,希腊字母在 utf-8 编码中占据连续的空间,因此您可以使用 \([α-ωΑ-Ω]*\) 而不是 \([A-Za-z]*\ 来构造您的正则表达式。

我个人更喜欢使用像"[A-Za-z]* \([α-ωΑ-Ω]*\)" 这样的正则表达式来检查模式是否成立,并使用字符串函数来执行拆分作业。但我相信这取决于您的个人喜好。

【讨论】:

【参考方案2】:

结构<name> (<unit>) 的无正则表达式解决方案是str.partition

>>> name, _, unit = "resistance (Ω)"[:-1].partition(" (")
>>> name
'resistance'
>>> unit
'Ω'

【讨论】:

以上是关于Python正则表达式希腊字符[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python 正则表达式

python正则表达式re

Python-正则表达式1

Python标准库01正则表达式

正则表达式 Python 模式 [重复]

Python - 正则表达式不替换目录字符串[重复]