【问题标题】:regex unicode characters正则表达式 unicode 字符
【发布时间】:2015-08-14 13:29:01
【问题描述】:

以下正则表达式可在线运行,但无法在 python 代码中运行,并且未显示匹配项: https://regex101.com/r/lY1kY8/2

s=re.sub(r'\x.+[0-9]',' ',s)

必填:

re.sub(r'\x.+[0-9]* ',' ',r'cats\xe2\x80\x99 faces')

Out[23]: '猫脸'

基本上是想去掉unicode特殊字符"\xe2\x80\x99"

【问题讨论】:

  • 如果您想匹配这 3 个 Unicode 字符,请使用 ur'[\xe2\x80\x99]' 正则表达式和 searchre.search(ur'[\xe2\x80\x99]',u'cats\xe2\x80\x99 faces') 有用吗?
  • @stribizhev 没有所有字符

标签: python regex


【解决方案1】:

作为不需要正则表达式的另一个选项,您可以通过删除 string.printable 中未列出的任何内容来删除 unicode 字符

>>> import string
>>> ''.join(i for i in 'cats\xe2\x80\x99 faces' if i in string.printable)
'cats faces'

【讨论】:

    【解决方案2】:
    print re.findall(r'\\x.*?[0-9]* ',r'cats\xe2\x80\x99 faces')
                                     ^^  
    

    使用raw mode 标志。使用findall 作为match 从头开始​​匹配

    print re.sub(ur'\\x.*?[0-9]+','',r'cats\xe2\x80\x99 faces')
    

    re.sub

    s=r'cats\xe2\x80\x99 faces'
    print re.sub(r'\\x.+?[0-9]*','',s)
    

    编辑:

    正确的方法是解码为utf-8,然后应用正则表达式。

    s='cats\xe2\x80\x99 faces'
    \xe2\x80\x99 is U+2019 
    print re.sub(u'\u2019','',s.decode('utf-8'))
    

    【讨论】:

    • 如何使用它来代替?
    • s=re.sub(r'\\x.+[0-9]',' ',s)
    • 如果它的变量呢?
    • 没有字符串来自函数 s=r'cats\xe2\x80\x99 faces' 中的列表是不可能的
    【解决方案3】:

    假设您使用 Python 2.x

    >>> s = 'cats\xe2\x80\x99 f'
    >>> len(s), s[4]
    (9, 'â')
    

    表示像\xe2 这样的字符长度为1,而不是3。因此您无法将其与r'\\x.+?[0-9]*' 匹配以匹配它。

    >>> s = '\x63\x61\x74\x73\xe2\x80\x99 f'
    >>> ''.join([c for c in s if c <= 'z'])
    'cats f'
    

    帮这个忙。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 2011-03-02
      • 2010-09-26
      • 2014-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多