Python demo

问题描述 投票:0回答:2
Example code

Output

  • -
    • If you want to use , then here is one way, using capture groups:A-BAThis prints:ABA A-B-BAB我试图使用regex在一个字符串中做以下事情。ABBAB
  • 如果有一个连字符 - 在两个字母之间,我们必须将其删除。
    • 例如 9AHYA7 应是 9-AHYA-7;和 977AB99T5 应是 977-AB-99-T-5

如果一个字母和一个数字相邻,那么我们必须插入一个连字符。

  • HS98743YVJUHGF78BF8HH3JHFC83438VUN5498FCNG
  • 7267-VHSBVH8737HHC8C-HYHFWYFHH-7Y84743YR8437G

之间的符号。

例子8T 8-T

    re.sub(r'\dab-d', '\d-ab-d', s)

应是

;和
python regex numbers character hyphen
2个回答
1
投票

在上面的字符串中,同样的原则必须被纳入。

我试着用下面的代码来转换

([A-Z]-(?=[A-Z]))|([A-Z](?=[0-9])|[0-9](?=[A-Z]))

变成

  • (可惜不能用。我不知道该怎么做。
    • [A-Z]-(?=[A-Z])
  • )我试图使用regex在一个字符串中做以下工作:如果有一个连字符 - 两个字母之间,我们必须删除它。例如A-BA应该是ABA; A-B-BAB应该是ABBAB 如果一个字母... ...
  • |你可以使用2个带有lookaround的捕获组,在替换时使用lambda来检查哪个组匹配。
  • (如果第1组匹配,则删除最后一个字符。如果第2组匹配,则添加一个连字符。解释
    • [A-Z](?=[0-9]) 捕捉
    • |第1组
    • [0-9](?=[A-Z]) 匹配A-Z和-,并断定右边的是A-Z。
  • ) 紧密型集团

捕捉 第二组

匹配A-Z,并断定右边的东西是数字

import re

pattern = r"([A-Z]-(?=[A-Z]))|([A-Z](?=[0-9])|[0-9](?=[A-Z]))"
strings = [
    "A-BA",
    "A-B-BAB",
    "9AHYA7",
    "977AB99T5",
    "HS98743YVJUHGF78BF8HH3JHFC83438VUN5498FCNG",
    "7267-VHSBVH8737HHC8C-HYHFWYFHH-7Y84743YR8437G"
]

for str in strings:
    result = re.sub(
        pattern,
        lambda x: x.group(1)[:-1] if x.group(1) else x.group(2) + "-",
        str
    )
    print(result)

ABA
ABBAB
9-AHYA-7
977-AB-99-T-5
HS-98743-YVJUHGF-78-BF-8-HH-3-JHFC-83438-VUN-5498-FCNG
7267-VHSBVH-8737-HHC-8-CHYHFWYFHH-7-Y-84743-YR-8437-G
匹配0-9,并断定右边的是A-Z。

1
投票

Regex演示re.sub

© www.soinside.com 2019 - 2024. All rights reserved.