Zep*_*hyr 1 python regex string extract placeholder
我有一些具有这种结构的字符串:<name> (<unit>). 我想提取name和unit; 执行我使用的这项任务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)'))
Run Code Online (Sandbox Code Playgroud)
我得到:
('distance', 'mm')
Run Code Online (Sandbox Code Playgroud)
但是当我尝试:
print(name_unit_split('resistance (?)'))
Run Code Online (Sandbox Code Playgroud)
我得到:
('resistance (?)', '')
Run Code Online (Sandbox Code Playgroud)
我搜索了其他正则表达式占位符并尝试使用这些,但没有成功:
name = re.split(' \([\p{Greek}]*\)', text)[0]
unit = re.findall('\([\p{Greek}]*\)', text)
Run Code Online (Sandbox Code Playgroud)
如何使用 查找字符串中的希腊字符(一个或多个,分组)regex?
此外,是否有更好的方法来执行上述任务regex?我的意思是:有一种方法来提取两<name>和<unit>,并将它们保存在name和unit用regex?
就像拉丁字母一样,希腊字母在 utf-8 编码中占据一个连续的空间,因此您可以使用\([?-??-?]*\)代替\([A-Za-z]*\来构建您的正则表达式。
我个人更喜欢使用正则表达式"[A-Za-z]* \([?-??-?]*\)"来检查模式是否成立并使用字符串函数来执行拆分作业。但我相信这取决于您的个人喜好。