Python使用正则表达式和条件插入捕获组

时间:2017-10-27 18:22:30

标签: regex optional backreference capturing-group

我有下面找到给定的模式并返回它而没有中间的空格。这样做有效,但我还想在子/\g<2>之间添加\g<3>,但只有当它不存在时才会在//pattern = re.compile(r"((\d{1,2}/\d{1,2}) (/?(\d{4}|\d{2})))") report_text = pattern.sub("\g<2>\g<3>", report_text) 之间添加Inputs Expected 02/58 98 02/58/98 02/58 /98 02/58/98 02/58 9518 02/58/9518 02/58 /98 02/58/9518 。否则会有重复UIDevice.current.userInterfaceIdiom。我尝试的所有东西都会弄乱捕获组。有什么帮助吗?

public enum UIUserInterfaceIdiom : Int {
    case unspecified

    @available(iOS 3.2, *)
    case phone // iPhone and iPod touch style UI

    @available(iOS 3.2, *)
    case pad // iPad style UI

    @available(iOS 9.0, *)
    case tv // Apple TV style UI

    @available(iOS 9.0, *)
    case carPlay // CarPlay style UI
}

以下是我的输入和预期结果:

Buffer.BlockCopy(onedim, 0, twodim, 0, onedim.Length * sizeof(int));

1 个答案:

答案 0 :(得分:2)

您的模式似乎过度使用捕获组。您可以将可选/?置于捕获组之外,以便匹配但不重新插入,只需在替换中使用/,例如

re.sub(r'(\d{1,2}/\d{1,2}) /?(?:(\d{4}|\d{2}))', r'\g<1>/\g<2>', report_text)

另见https://ideone.com/YuWrAy