gpt4 book ai didi

python - 高级字符串的正则表达式

转载 作者:行者123 更新时间:2023-12-01 04:00:32 28 4
gpt4 key购买 nike

使用 Python 3.4 我想匹配具有以下格式的字符串:

s1 = "Germany  ; Federal Republic of Germany\tRépublique fédérale d'Allemagne\n"
s2 = "English ; English language\tanglais\n"
s3 = "February\tfévrier\n"

请注意两种语言之间如何存在制表符,如果一种语言中有多个单词,则它们被 "; "(两个空格、分号、一个空格)分隔。

我的目标是读取每种语言的第一个变量。所以我想匹配

  • s1("德国", "République fédérale d'Allemagne")
  • s2("English", "anglais")
  • s3("二月", "février")

\t两边只有一对词汇或多个表达式的情况下。

问题是我找不到正确的模式。我尝试了多个表达式(使用 search() ,然后在返回的匹配对象上调用 groups() ),但似乎无法解决问题。

s1 的示例:

  • r"([\w ]*)\t([\w ]*)" 查找 ('德意志联邦共和国', 'République fédérale d')
  • r"(.*),?\t(.*),?" 查找 ('德国 ; 德意志联邦共和国', "République fédérale
    达勒曼”)

这两个例子都没有达到我想要的效果。我不知道下一步该尝试什么。我确信有一种方法可以匹配 "; " 后面的任何字符,直到 \t 但我现在不知道如何。

非常感谢您的帮助。

最佳答案

需要记住的重要一点是中间部分 - 由“;”分隔的可选第二位- 是可选的。正则表达式支持使用 ? 运算符的可选部分。

您想要捕获第一个单词,忽略中间部分,并捕获最后部分:

(capture) optional? (capture)

因为中间部分可能很复杂,所以您需要使用括号。但是您可以使用非捕获括号 - (?: non-captured pattern ) 来实现这一点。

(capture) (?: optional )? (capture)

你也许可以弄清楚剩下的事情:

#! python3
strings = [
"Germany ; Federal Republic of Germany\tRépublique fédérale d'Allemagne\n",
"English ; English language\tanglais\n",
"February\tfévrier\n",
]

import re

for s in strings:
m = re.match(r"^(\S+)(?: ; [^\t]+)?\t([^\n]+)\n", s)
print((m.group(1), m.group(2)))

关于python - 高级字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36635381/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com