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