正则表达式问题删除':/'

时间:2019-04-17 12:32:23

标签: python regex python-3.x

我需要从字符串中删除不是字母,数字,空格或'-'的所有内容。

我使用:

regex = re.compile('^[,?!`@#$%^&*()+=.:/]+')
name = regex.sub('', my_text)

但是如果我有文字:

lorem ipsum: 100 gb/s and beyond

我在上面的示例中的正则表达式不会删除':''/'

2 个答案:

答案 0 :(得分:3)

您需要删除^(行首) 顺便说一句,+不是必须的

regex = re.compile('[,?!`@#$%^&*()+=.:/]')
name = regex.sub('', my_text)

演示:https://regex101.com/r/DjTvwL/1

我重新阅读了您的描述,由于您不想要“除了字母,数字和空格之外的所有内容”,因此您当前的正则表达式不适合:它使用[_,以此类推...所以您最好使用负数正则表达式:

import re
my_regex = re.compile('([^0-9A-Za-z\-\s])') # 0- 9 => digits; A-z => letter; \- the '-' char; \s any whitespace
my_text = 'lorem ipsum: 100 gb/s and beyond'

name = my_regex.sub('', my_text)

print(name)

答案 1 :(得分:1)

我不建议捕获所有可能的符号,装饰符号以及要删除的任何其他字符,而是建议从字面上实现“不是字母,数字,空格或'-'的所有内容”:

regex = re.compile('[^a-zA-Z0-9 -]')
name = regex.sub('', my_text)

您可以在字符类中使用字符类。如果您可以将下划线表示为字母,并且希望支持Unicode字母,则以下内容会更简洁:

 regex = re.compile('[^\w -]')

原始表达式的问题在于,字符类外部的^与行的开头匹配。您的表达式只能删除您从字符串开头指定的字符。