【问题标题】:Python regex greek characters [duplicate]Python正则表达式希腊字符[重复]
【发布时间】: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(' \([\p{Greek}]*\)', text)[0]
unit = re.findall('\([\p{Greek}]*\)', text)

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

【问题讨论】:

    标签: python regex string extract placeholder


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-01-30
        • 2011-08-20
        • 2016-12-28
        • 2018-05-28
        • 2013-11-26
        • 1970-01-01
        • 2022-01-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多