当前位置: 首页 > 面试题库 >

如何替换大海捞针的第N个外观?(蟒蛇)

蒯嘉赐
2023-03-14
问题内容

我正在尝试替换大海捞针中的第N个外观。我只想通过re.sub()来做到这一点,但是似乎无法提出一个合适的正则表达式来解决这个问题。我正在尝试适应:http
:
//docstore.mik.ua/orelly/perl/cookbook/ch06_06.htm,但是我认为跨多行失败。

我当前的方法是一种迭代方法,该方法从每次突变后的开始就查找每次出现的位置。这是非常低效的,我想获得一些意见。谢谢!


问题答案:

我已经为此苦苦挣扎了一段时间,但是我找到了一个我认为非常pythonic的解决方案:

>>> def nth_matcher(n, replacement):
...     def alternate(n):
...         i=0
...         while True:
...             i += 1
...             yield i%n == 0
...     gen = alternate(n)
...     def match(m):
...         replace = gen.next()
...         if replace:
...             return replacement
...         else:
...             return m.group(0)
...     return match
...     
... 
>>> re.sub("([0-9])", nth_matcher(3, "X"), "1234567890")
'12X45X78X0'

编辑 :匹配器由两部分组成:

  1. alternate(n)功能。这将返回一个生成器,该生成器返回一个无限序列True / False,其中每个第n个值均为True。觉得像list(alternate(3)) == [False, False, True, False, False, True, False, ...]

  2. match(m)功能。这是传递给的函数re.sub:它获取alternate(n)gen.next())中的下一个值,如果是,True它将替换匹配的值;否则,它将保持不变(将其自身替换)。

我希望这足够清楚。如果我的解释不明确,请这样说,我会改善的。



 类似资料:
  • 在这里,我与Java一起做自动化,与放心一起做宁静。因此,我想用模板中的空白字符串替换第二个 &标记。 这里我附上了模板 我正在使用下面的代码替换第2个 和标记。但它被替换为所有 标记(第一个和最后一个 标记) 如何只替换第2个 和标记?请帮助我完成我的工作。

  • 问题内容: 尝试简单地替换一些新行。尝试了3种不同的方法,但我没有任何改变: 这些都应该起作用,但是我仍然可以换行。它们是双精度的:“ \ r \ r”。那不应该让这些失败吗? 问题答案: 已经有在换行符之前 替换 插入* 标签的[]功能: ~~~~* 示例(键盘): 但是,如果仍然无法正常工作,请确保文本被双引号引起来。 那是因为单引号不会“扩展”转义序列,例如与双引号字符串相比。引用PHP文档

  • 问题内容: 我需要一种方法来计算Python中长整数的第n个根。 我试过了,但是不起作用: OverflowError:long int太大,无法转换为float 有任何想法吗? 长整数是指真正的长整数,例如: 11968003966030964356885611480383408833172346450467339251 1960931441410456834630852911156774884

  • 问题内容: 我正在用Python解析文件中的文本。我必须替换所有换行符(\ n), 因为此文本将生成html-content。例如,这是文件中的一些行: 现在我做: 而且我仍然看到带有换行符的文本。 问题答案: 只是踢,你也可以 用替换字符串中的所有换行符。

  • 问题内容: 我想使用命令用新行(\ n)替换所有出现的字符串“ \ n”。 我试过了,但这似乎匹配任何’'和任何’n’ 问题答案: 这是使用以下方法的方法: 用法示例: 要就地替换文件中所有出现的内容: 替换所有通过管道出现的事件,并保存到另一个文件中

  • 问题内容: 对于几种语言,已经多次询问了此信息,但我无法使其正常工作。我有这样的字符串 而且我想,以取代与使用 但不会被替换。我试图使用此RegEx工具进行验证,但看到的结果相同。输入的字符串不匹配。我究竟做错了什么 ? 问题答案: 这个对我有用。 结果: 您的问题在其他地方。