使用正则表达式删除星号和空行

Posted

技术标签:

【中文标题】使用正则表达式删除星号和空行【英文标题】:Remove star and empty line using regex 【发布时间】:2021-12-16 04:53:54 【问题描述】:

我有数据框,我想在本地化中删除星号和所有空行。我必须创建两列“temp”和“word”。

“temp”包含第一个换行符之后的所有行,“word”列表示在“temp”中找到的此列表的所有单词:

words = ['SECTION 11', 'CONE', 'BELLY', 'FIXED PLAN']

我的意见:

预期输出:我必须将“单词”列中的星号替换为空:

我试试这个

def SplitRow(description):
    import re
    substring=re.findall(r"[A-Za-z0-9,\*\s]+",description.split("\n")[1])
    if description.split("\n")[1] in substring:
        if re.findall(r"^\s?\*\$", description.split("\n")[1]):
            return "etoile"+description.split("\n")[1]
        if re.findall(r"Localisation\s*:.*", description.split("\n")[1]):
            return description.split("\n")[2]
        return description.split("\n")[1]

但它不起作用,因为None 有很多行:

【问题讨论】:

一般情况下,不要发布代码图片;请参阅here 了解更多信息。 @rv.kvetch 我已经用文本替换了主要部分。但是,在这种情况下,作为文本的代码对于理解问题和帮助 OP,恕我直言,并不是真正必要的。 好吧,为了将来参考,我想重点是其他人不应该花时间转录问题中的代码。 @Mohammed Grini 请注意。 【参考方案1】:

你可以使用

import re
df['temp'] = df['localisation'].str.replace(r'^.*\n', '', regex=True)
words = ['SECTION 11', 'CONE', 'BELLY', 'FIXED PLAN']
df['word'] = df['temp'].str.findall(fr'(?<!\w)(?:"|".join([re.escape(w) for w in words]))(?!\w)').str.join(', ')

详情

.str.replace(r'^.*\n', '', regex=True) 用换行符删除第一行 .str.findall(fr'(?&lt;!\w)(?:"|".join([re.escape(w) for w in words]))(?!\w)') 将所有出现的words 提取为temp 列中的整个单词(由于(?&lt;!\w)(?!\w) 明确的单词边界),同时转义words 中的所有非单词字符。 最后代码行末尾的.str.join(', ') 用于使用逗号+空格加入找到的匹配列表。如果您编辑 .str.join() 部分中的参数,您可以进一步调整加入匹配项的内容。

【讨论】:

以上是关于使用正则表达式删除星号和空行的主要内容,如果未能解决你的问题,请参考以下文章

Notepad ++中的正则表达式删除空行

无法使用 sed 正则表达式删除空行

如何使用 sed 命令正则表达式在文件中查找第一个空行并删除

利用正则表达式清除多余的空行

如何使用正则表达式删除尾随空格?

教你使用notepad++ 删除空行的方法技巧