我需要从字符串中删除不是字母,数字,空格或'-'的所有内容。
我使用:
regex = re.compile('^[,?!`@#$%^&*()+=.:/]+')
name = regex.sub('', my_text)
但是如果我有文字:
lorem ipsum: 100 gb/s and beyond
我在上面的示例中的正则表达式不会删除':'
,'/'
答案 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 -]')
原始表达式的问题在于,字符类外部的^
与行的开头匹配。您的表达式只能删除您从字符串开头指定的字符。