【问题标题】:Case insensitivity in Python stringsPython 字符串中的大小写不敏感
【发布时间】:2009-04-24 23:42:44
【问题描述】:

我知道您可以使用 ctypes 库对字符串执行不区分大小写的比较,但是我也想执行不区分大小写的替换。目前我知道这样做的唯一方法是使用正则表达式,这样做似乎有点糟糕。

是否有不区分大小写的 replace() 版本?

【问题讨论】:

  • 为什么你认为正则表达式很差?正则表达式有什么问题?
  • 解决一个简单问题的方法似乎过于复杂,比如用卡车运送一个床头柜。
  • 不——应该有一种,最好只有一种,明显的方法。由于 re 非常适合不区分大小写的 sub,因此它会打破这一设计原则,使 str 变得更加复杂,只是为了提供另一种方法来做完全相同的事情。

标签: python


【解决方案1】:

您可以将标志 re.IGNORECASE 提供给 re 模块中的函数,如docs 中所述。

matcher = re.compile(myExpression, re.IGNORECASE)

【讨论】:

  • 肯定 re.sub 会更好?
  • 您将使用 compile 返回的对象作为 re.sub 中的模式。
  • 啊,如果我经常使用它,它会更快。谢谢!
【解决方案2】:

使用re 是最好的解决方案,即使您认为它很复杂。

要将所有出现的'abc''ABC''Abc' 等替换为'Python',请说:

re.sub(r'(?i)abc', 'Python', a)

示例会话:

>>> a = 'abc  asd   Abc  asd  ABCDE    XXAbCXX'
>>> import re
>>> re.sub(r'(?i)abc', 'Python', a)
'Python  asd   Python  asd  PythonDE    XXPythonXX'
>>> 

注意在正则表达式开头嵌入(?i) 如何使其区分大小写。另请注意正则表达式的 r'...' 字符串文字(在这种特定情况下是多余的,但只要您的正则表达式中有反斜杠 (\) 就会有帮助。

【讨论】:

    【解决方案3】:

    最简单的方法是将其全部转换为小写,然后进行替换。但是如果要保留原案,显然是个问题。

    我会做一个正则表达式替换,你可以指示正则表达式引擎一起忽略大小写。

    有关示例,请参阅 this site

    【讨论】:

      猜你喜欢
      • 2010-11-26
      • 2011-02-06
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-31
      • 2019-06-25
      相关资源
      最近更新 更多