【发布时间】:2021-11-05 01:00:23
【问题描述】:
给定<digit>-<non-digit> 或<non-digit>-<digit> 形式的字符串,我需要删除连字符(在Python 中)。 IE。 2-f 变为 2f,f-2 变为 f2。
到目前为止,我有(?:\d-\D)|(?:\D-\d),它找到了模式,但我想不出用空白替换连字符的方法。特别是:
- 如果我
sub上面的正则表达式,它将替换周围的字符(因为它们是匹配的); - 我可以使用
(?:(\d)-(\D))|(?:(\D)-(\d))来明确捕获字符,然后sub和\1\2将正确处理2-f,将其转换为2f...但是!当然,它会失败f-2,因为这些字符位于第 3 组和第 4 组中,所以我们需要使用\3\4进行替换。尝试为组命名失败,因为所有名称都必须是唯一的。
我知道我可以通过 2 个 sub 语句运行它,但有没有更优雅的解决方案?如果您知道自己在做什么,我知道正则表达式非常强大...谢谢!
【问题讨论】:
-
一种解决方案是使用环视来断言数字/非数字字符存在而不匹配它们。你最终会得到类似
(?<=\d)-(?=\D)|(?<=\D)-(?=\d)
标签: regex