Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Reg ex不删除数据_Python_Regex - Fatal编程技术网

Python Reg ex不删除数据

Python Reg ex不删除数据,python,regex,Python,Regex,我有一个函数,它接收数据列表,然后删除与以下定义的任何正则表达式匹配的任何数据: def clean_data(data): # Regex for email, punctuation, common words regex_list = ['[\w\.-]+@[\w\.-]+', '[^\P{P}-]+', '\band\b|\bor\b|\bnot\b|\ba\b|\ban\b|\bis\b|\bthe\b|\bof\b|\blike\b'] for i in data: for

我有一个函数,它接收数据列表,然后删除与以下定义的任何正则表达式匹配的任何数据:

def clean_data(data):
# Regex for email, punctuation, common words
regex_list = ['[\w\.-]+@[\w\.-]+', '[^\P{P}-]+', '\band\b|\bor\b|\bnot\b|\ba\b|\ban\b|\bis\b|\bthe\b|\bof\b|\blike\b']

for i in data:
    for r in regex_list:
        i = re.sub(r, '', i)
return data
我将
数据
定义如下:

data = ['this is like my name: Bob.', 'my email is bob@gmail.com']
当我在控制台中运行它时,我得到的输出是:

清理数据(数据)

Out[74]:[“这就像我的名字:鲍勃。”,“我的电子邮件是bob@gmail.com“]


我做错了什么?

当您执行
re.sub
时,实际上是在创建一个新字符串,而不是修改现有字符串。因此,
i
是对一个全新对象的引用。您可以将其插入列表中,也可以创建一个新的
数据
列表

下面是如何将其插入列表中的(为了演示,我将坚持调用字符串
I
的糟糕惯例)


您的
\b
内部
'\b'
是一个退格字符,而不是单词边界,在这里使用
r'pattern\u'
。我以为
\b
是单词边界?我的格式是这样的,所以我的格式是这样的:<代码>'r'r'r'r'r'r'r'r'r'r'r'r'r'r'r'r'r'r'r'r'r'r'r'r'r'和r'r'r'和r'r'和r'124;r'r'r'r'r'r'r'r'r'和r'r'r'r'r'r'r'r'r'r'r'r'r'或者r'r'r'r'r'r r'不124;r'r'r'r'r'r'r'r'r'r'r'r'r'124a'r'r'r'r'r'r'r'r'a'a a'a'a'a'a'a'a'a'a'a'a'a'a'a'a'a'a'a'a'a'a'a'a要转义,请使用
r'
,而不必转义每个反斜杠。查看更多信息info@GalAbra我的输出也一样。它甚至不会捕捉电子邮件或标点符号,但我将它赋回同一个变量,所以这不考虑插入吗?啊,刚刚看到你的编辑。我该如何重新插入它呢?您应该想象一个变量只是持有对实际对象的引用。将新对象指定给它时,对旧对象的引用将丢失。另外,请再次检查编辑,记住,对
数据的引用将传递到此函数。当您像我在回答中所做的那样在适当的位置更改
数据
时,您不必返回
数据
,因为我在运行此操作时更改了传递给它的对象,它会删除所有内容。我在下面的列表中运行它:
data=[“这就像我的电子邮件一样bob@gmail.com“,“一点也不喜欢,也不奇妙”,“噗”]
。我的输出是[85]:['','',']
。这是你的正则表达式的错。我认为这与这个问题无关
def clean_data(data):
    # Regex for email, punctuation, common words
    regex_list = ['[\w\.-]+@[\w\.-]+', '[^\P{P}-]+', '\band\b|\bor\b|\bnot\b|\ba\b|\ban\b|\bis\b|\bthe\b|\bof\b|\blike\b']

    for k, i in enumerate(data):
        for r in regex_list:
            i = re.sub(r, '', i)
            data[k] = i
    return data