正则表达式忽略特定字符

时间:2014-02-07 10:31:36

标签: python regex parsing

我正在解析非字母数字字符的文本,并希望排除撇号,短划线/连字符和逗号等特定字符。

我想为以下情况构建一个正则表达式:

  1. 非字母数字字符,不包括撇号和超量
  2. 非字母数字字符,不包括逗号,撇号和超量
  3. 这就是我的尝试:

    def split_text(text):
        my_text = re.split('\W',text)
    
        # the following doesn't work.
        #my_text = re.split('([A-Z]\w*)',text)
        #my_text = re.split("^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$",text)
    
        return my_text
    
    • 案例1
      • 示例输入:怎么了?很高兴见到你我的朋友。对世界“你好”!
      • 示例输出: ['什么','上','它','好','到','看','你','我的朋友','你好','to-the','world']
    • 案例2
      • 示例输入:这意味着做这样的事情并不好。
      • 示例输出: ['它','表示','表示','它','不','好'到','做','这样','东西]

    任何想法

2 个答案:

答案 0 :(得分:3)

您可以使用否定的character class

my_text = re.split(r"[^\w'-]+",text)

my_text = re.split(r"[^\w,'-]+",text)   # also excludes commas

答案 1 :(得分:3)

这就是你想要的吗?

  

非字母数字字符,不包括撇号和超量

my_text = re.split(r"[^\w'-]+",text)
  

非字母数字字符,不包括逗号,撇号和超量

my_text = re.split(r"[^\w-',]+",text)

[]语法定义了一个字符类,[^..] “补充”它,即它否定了它。

请参阅documentation

  

可以通过补充集来匹配不在范围内的字符。如果该集的第一个字符是 '^',则将匹配该集合中不包含的所有字符。例如, [^5] 将匹配除 '5' 之外的任何字符,并且 [^^] 将匹配任何字符除了 '^'^ 如果不是该集合中的第一个字符,则没有特殊含义。