【问题标题】:Regex to ignore specific characters正则表达式忽略特定字符
【发布时间】:2014-03-04 17:19:46
【问题描述】:

我正在解析非字母数字字符的文本,并希望排除特定字符,如撇号、破折号/连字符和逗号。

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

  1. 非字母数字字符,不包括撇号和连字符
  2. 非字母数字字符,不包括逗号、撇号和连字符

这是我尝试过的:

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
    • 输入示例:怎么了?很高兴见到你,我的朋友。向世界“你好”!
    • 示例输出: ['What's','up','It's','good','to','see','you','my-friend','Hello',' to-the','世界']
  • 案例 2
    • 示例输入: 意思是,做这样的事情不好。
    • 示例输出: ['It', 'means', 'that,', 'it's', 'not', 'good-to', 'do', 'such', 'things']

任何想法

【问题讨论】:

  • 您的代码中有一些错误(与问题无关),例如第一行末尾缺少冒号,函数本身有缩进。
  • 感谢指点,已修复。

标签: python regex parsing


【解决方案1】:

这是你想要的吗?

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

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

非字母数字字符,不包括逗号、撇号和连字符

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

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

请参阅documentation 了解相关信息:

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

【讨论】:

  • 非常感谢您的回答和解释。
【解决方案2】:

您可以为此使用否定的character class

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

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

【讨论】:

  • 非常感谢您的回答。
  • 既然zmo解释了,我接受他的回答可以吗?
  • @user3247054: 当然可以,而且你不必问 :) (事实上,甚至没有必要说“谢谢”,点赞是你能给予的最好的感谢。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
  • 2015-06-25
相关资源
最近更新 更多