正则表达式替换:获取字符串的一半

时间:2021-04-08 05:18:46

标签: regex pcre

我还有一个关于正则表达式的问题。要求很简单:

给定一个长度为偶数的字符串。

  • 12
  • 1234
  • 123456
  • 12345678
  • abcdef

编写一个替换正则表达式来获取字符串的前半部分:

替换后:

  • 1
  • 12
  • 123
  • 1234
  • abc

我正在使用 pcre,它支持递归和控制动词。

我试过这样的东西,但它不起作用:(

s/^(?=(.))(?:((?1))(?1))+$/$2/mg

这是the test subject on regex101

有可能吗?我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

我很确定这不是最优雅的解决方案,但它确实有效:

>>> def half(string):
        regex = re.compile(r"(.{%d})" % int(len(string)/2))
        return regex.search(string).group(1)

>>> half("12")
'1'
>>> half("1234")
'12'
>>> half("123456")
'123'
>>> half("12345678")
'1234'
>>> half("abcdef")
'abc'