【问题标题】:Add characters to Python unicode strip?将字符添加到 Python unicode 条?
【发布时间】:2016-02-29 20:17:44
【问题描述】:

我想从条带中删除尾随空格和一些其他字符。这是示例输入/输出(明确标记的制表符和换行符):

Input:
"\t [[  dwarf ]]]   \n"

Output:
"dwarf"

现在我理论上可以像这样解决我的问题:

x = x.strip().strip("[]").strip().strip("[]")

这应该会耗尽我的数据库中可能发生的所有组合;但是,如果我们有更多级别的括号和空格,我仍然需要更改代码。我可以用循环一般地解决这个问题,但它会同样丑陋和低效。有没有更好的方法,或者告诉strip不要使用整个字符串,而是使用我提供的字符?

【问题讨论】:

    标签: python regex text unicode


    【解决方案1】:

    您只需拨打str.strip一次:

    In [6]: import string
    
    In [7]: "\t [[  dwarf ]]]   \n".strip("[]" + string.whitespace)
    Out[7]: 'dwarf'
    

    string.whitespace 是一个包含所有 (ascii) 空白字符的字符串。 S.strip("[]" + string.whitespace) 将删除 [] 和空白字符的所有组合。

    【讨论】:

    • 太棒了。 unicode 呢?有unicode.whitespace吗?
    • @MatthewRock:对不起,我没有资格评论 Python 2。据我所知,没有 unicode.whitespace 或同等名称。
    • @MatthewRock 如果有帮助,你能检查我的答案吗?
    【解决方案2】:

    这是一个支持 UNICODE 的正则表达式版本。

    >>> import re
    >>> st = "\t [[  dwarf ]]]   \n"
    >>> re.sub(r"\s*\[|\]\s*", "", st, flags=re.UNICODE).strip()
    'dwarf'
    

    比上一个稍微优雅的正则表达式(使用ur处理UNICODE正则表达式模式):

    >>> re.sub(ur"[ \s*[\] ]+", "", st, flags=re.UNICODE).strip()
    

    【讨论】:

    • 在 REPL 中测试时看起来不错。但是,我会用 ur 替换 r,只是为了处理 unicode 正则表达式的人 - 我是 Python 新手,我经常发现自己与它的正则表达式作斗争才发现我忘了把 'u' 放在前面其中。空字符串也一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 2018-07-21
    • 2018-05-04
    • 2012-08-07
    • 2018-06-07
    • 1970-01-01
    • 2017-02-27
    相关资源
    最近更新 更多