gpt4 book ai didi

python - 如何在python中匹配带有点的字符串

转载 作者:行者123 更新时间:2023-12-04 08:14:44 25 4
gpt4 key购买 nike

我正在尝试使用 re 匹配一组遵循特定模式的字符串。但是,它在某些时候失败了。
这是失败的字符串

string1= "\".A.B.C.D.E.F.G.H.I.J\""
string2= "\".K.Y.C.A.N.Y.W.H.I.A.W...1.B...1.1.7\""
string3= "\"Testing using quotes func \"quot\".\"":
string4= "A.b.e.f. testing test":
这是我的方法:
"".join(re.findall("\.(\w+)", string1))
以下是我的期望:
"ABCDEFGHIJ"
"KYCANYWHIAW.1B.117"
"Testing using quotes func \"quot\"."
"A.b.e.f. testing test"
它只适用于第一个字符串

最佳答案

对于给定的示例,一种选择是删除点,同时断言直接在右侧的是可选点后跟字符 A-Z 或数字 0-9。
请注意 \w也会匹配 a-z。

\.(?=\.?[A-Z0-9])
说明
  • \.匹配一个点
  • (?=正向前瞻,断言直接向右的是
  • \.?[A-Z0-9]可选择匹配一个点和一个字符 A-Z 或数字 0-9

  • )关闭前瞻

  • Regex demo | Python demo
    示例代码
    import re

    strings = [
    "\".A.B.C.D.E.F.G.H.I.J\"",
    "\".K.Y.C.A.N.Y.W.H.I.A.W...1.B...1.1.7\"",
    "\"Testing using quotes func \"quot\".\"",
    "A.b.e.f. testing test"
    ]

    for s in strings:
    print(re.sub(r"\.(?=\.?[A-Z0-9])", '', s))
    输出
    "ABCDEFGHIJ"
    "KYCANYWHIAW.1B.117"
    "Testing using quotes func "quot"."
    A.b.e.f. testing test

    另一种选择是为匹配交替的模式指定不同的规则。例如,使用多次出现的点并在 W.1 之间留下一个。和 B.1 :
    (?<!\d)\.+(?=[A-Z.])|(?<=\d)\.+(?=[A-Z\d])
    Regex demo

    关于python - 如何在python中匹配带有点的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65762993/

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