不区分大小写的替换
在 Python 中进行不区分大小写的字符串替换的最简单方法是什么?
What's the easiest way to do a case-insensitive string replacement in Python?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
在 Python 中进行不区分大小写的字符串替换的最简单方法是什么?
What's the easiest way to do a case-insensitive string replacement in Python?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(11)
string
类型不支持此功能。 您可能最好使用正则表达式子方法 re.IGNORECASE 选项。The
string
type doesn't support this. You're probably best off using the regular expression sub method with the re.IGNORECASE option.在一行中:
或者,使用可选的“flags”参数:
In a single line:
Or, use the optional "flags" argument:
继续 bFloch 的答案,这个函数不会改变一个,而是所有出现的旧的都会变成新的——以一种不区分大小写的方式。
Continuing on bFloch's answer, this function will change not one, but all occurrences of old with new - in a case insensitive fashion.
就像 Blair Conrad 所说 string.replace 不支持这一点。
使用正则表达式
re.sub
,但请记住首先转义替换字符串。 请注意,2.6 中没有re.sub
的标志选项,因此您必须使用嵌入修饰符'(?i)'
(或 RE 对象,参见布莱尔·康拉德的回答)。 另外,另一个陷阱是,如果给出了字符串,则 sub 将处理替换文本中的反斜杠转义。 为了避免这种情况,可以传入 lambda。这是一个函数:
Like Blair Conrad says string.replace doesn't support this.
Use the regex
re.sub
, but remember to escape the replacement string first. Note that there's no flags-option in 2.6 forre.sub
, so you'll have to use the embedded modifier'(?i)'
(or a RE-object, see Blair Conrad's answer). Also, another pitfall is that sub will process backslash escapes in the replacement text, if a string is given. To avoid this one can instead pass in a lambda.Here's a function:
关于语法细节和选项的一个有趣的观察:
在匹配表达式中使用
(?i)
前缀或添加flags=re.I
作为第四个参数将导致情况-不敏感匹配 - 但是仅使用re.I
作为第四个参数不会导致不区分大小写的匹配。用于比较:
An interesting observation about syntax details and options:
Using the
(?i)
prefix in the match expression or addingflags=re.I
as a fourth argument will result in a case-insensitive match - however using justre.I
as the fourth argument does not result in case-insensitive match.For comparison:
此函数同时使用
str.replace()
和re.findall()
函数。它将以不区分大小写的方式将
string
中所有出现的pattern
替换为repl
。This function uses both the
str.replace()
andre.findall()
functions.It will replace all occurences of
pattern
instring
withrepl
in a case-insensitive way.这不需要正则表达式
This doesn't require RegularExp
我将 \t 转换为 转义序列 (向下滚动一点),所以我注意到 re.sub 将反斜杠转义字符转换为转义序列。
为了防止这种情况,我写了以下内容:
替换不区分大小写。
另外,如果您希望它替换为转义字符,就像此处的其他答案一样,将特殊含义的 bashslash 字符转换为转义序列,只需解码您的查找和/或替换字符串即可。 在 Python 3 中,可能需要执行类似 .decode("unicode_escape") # python3
在 Python 2.7.8 中测试的操作
I was having \t being converted to the escape sequences (scroll a bit down), so I noted that re.sub converts backslashed escaped characters to escape sequences.
To prevent that I wrote the following:
Replace case insensitive.
Also, if you want it to replace with the escape characters, like the other answers here that are getting the special meaning bashslash characters converted to escape sequences, just decode your find and, or replace string. In Python 3, might have to do something like .decode("unicode_escape") # python3
Tested in Python 2.7.8
1 行简单解决方案,无需导入:-)
结果是:
1 line simple solution without imports :-)
The result is: