【问题标题】:Apply list of regex pattern on list python在列表 python 上应用正则表达式模式列表
【发布时间】:2019-07-04 08:04:49
【问题描述】:

我有一个数据框,其中txt 列包含一个列表。我想使用函数 clean_text() 清理 txt 列。

data = {'value':['abc.txt', 'cda.txt'], 'txt':['[''2019/01/31-11:56:23.288258 1886     7F0ED4CDC704     asfasnfs: remove datepart'']',
                                               '[''2019/02/01-11:56:23.288258 1886     7F0ED4CDC704     asfasnfs: remove datepart'']']}
df = pandas.DataFrame(data=data)

def clean_text(text):
    """
    :param text:  it is the plain text
    :return: cleaned text
    """
    patterns = [r"^{53}",
                r"[A-Za-z]+[\d]+[\w]*|[\d]+[A-Za-z]+[\w]*",
                r"[-=/':,?${}\[\]-_()>.~" ";+]"]

    for p in patterns:
        text = re.sub(p, '', text)

    return text

我的解决方案

df['txt'] = df['txt'].apply(lambda x: clean_text(x))

但我遇到以下错误: 错误

sre_constants.error: nothing to repeat at position 1

【问题讨论】:

标签: python regex list


【解决方案1】:

^{53} 不是一个有效的正则表达式,因为转发器{53} 前面必须有一个可以重复的字符或模式。如果您想让它验证至少 53 个字符长的字符串,您可以改用以下模式:

^.{53}

【讨论】:

  • 感谢您的回答。我已经更新了问题,现在我收到了Attribute error
【解决方案2】:

罪魁祸首是列表中的第一个模式 - r"^{53}"。它显示:^ - 匹配字符串的开头,然后 {53} 重复前一个字符或组 53 次。等等……但是除了^之外没有其他字符不能重复!确实。添加一个要匹配 53 次重复的字符。或者,如果您想逐字匹配,请转义序列{53},例如使用re.escape

【讨论】:

  • 感谢您的回答。我已经更新了问题,现在我收到了Attribute error
  • 这应该是另一个问题。如果您更改问题的关键要素,问题的读者如何理解答案?
  • 在你这样做之前 - 请先恢复更改,以便答案对问题有意义。
  • 我已将其发布为不同的问题:stackoverflow.com/questions/54620550/…。你能帮我解决吗?
  • 我已经这样做了,尽管我相信你应该奖励已经为回答这个问题所做的努力。
猜你喜欢
  • 1970-01-01
  • 2012-09-02
  • 2021-02-09
  • 1970-01-01
  • 2013-11-24
  • 1970-01-01
  • 2019-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多