【问题标题】:Python Regex re.sub not working in For loopPython Regex re.sub 在 For 循环中不起作用
【发布时间】:2015-05-24 09:37:49
【问题描述】:

我无法用编辑的文本替换特定模式的特定出现。我已经使用了 for...loop 来提出如何获得特定出现的模式,但我无法将它与 re.sub 语句一起使用。

这是我的 Python 2 代码:

def split(content):
    count = 0
    s = ""
    for i in re.finditer(r'(?s)(\\thinhline\n\\\\\[-16pt]\n)([a-zA-Z\s\(\)]+)(.*?)(\n *\\\\)', content):
        count= count + 1
        x =  len(re.findall('^\s*&', i.group(3), re.M))
        if x < 6:
            break
        elif x >= 6:
            g = normalizationConstraints(i.group(3),i.group(2)) + "\n"
            s = str(g) + "\n"
            content = re.sub(i,s,content)
    return content

错误就行了:

         content = re.sub(i,s,content)

因为变量“i”显然不是正则表达式。

错误:

TypeError: first argument must be string or compiled pattern

我该如何解决这个问题??

谢谢。

【问题讨论】:

  • 你能添加实际的错误信息吗?
  • @ASGM 我添加了错误。
  • 你认为i 是什么?你试过打印i吗?
  • 你的正则表达式中有很多反斜杠。你确定它是正确的吗?您能否举例说明您打算使用此代码实现的目标?

标签: python regex for-loop text replace


【解决方案1】:

我不确定你想要什么,但错误告诉你正确的事情:i 不是正则表达式模式。 re.finditer 返回一个 MatchObjects 的迭代器,在这个上下文中可能是字符串。 re.sub 期望正则表达式模式作为其第一个参数。

根据您尝试使用此代码实现的目标,您需要使用与re.sub 不同的函数,或者需要提供实际的正则表达式。如果你能提供更多关于你的目标的细节(也许是基于一些样本输入的预期输出,正如@200_success 所建议的那样),那将有所帮助。

【讨论】:

    猜你喜欢
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 2016-01-31
    相关资源
    最近更新 更多