【问题标题】:Regex substitution: getting half of the string正则表达式替换:获取字符串的一半
【发布时间】:2021-04-08 05:18:46
【问题描述】:

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

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

  • 12
  • 1234
  • 123456
  • 12345678
  • abcdef

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

替换后:

  • 1
  • 12
  • 123
  • 1234
  • abc

我用的是pcre,它支持递归和控制动词。

我尝试了类似的方法,但它不起作用:(

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

这里是the test subject on regex101

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

【问题讨论】:

  • 你从哪里得到这个问题的?另一个测验?
  • 类似这样的:^(?:.(?=.*?((?(1).\1|.)$)))+\K\1 替换 - 空字符串

标签: regex pcre


【解决方案1】:

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

>>> 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'

【讨论】:

  • 它有效,但我不允许使用任何代码,只允许一个正则表达式:(
猜你喜欢
  • 2018-07-13
  • 2017-02-04
  • 1970-01-01
  • 1970-01-01
  • 2015-11-30
  • 1970-01-01
  • 2021-11-29
相关资源
最近更新 更多