所以,我的问题是:
我正在尝试替换字符串中不是“a”或“C”大小写的任何内容。我的琴弦都是三个字符。(实际上,具体的两个字母会改变,这就是为什么我不硬编码否定的值。)
所以,我想我会的
re.sub(r'[ac]', "X", "ABC", re.IGNORECASE)
但是,我得到的是“XXC”。我期待“AXC”。在
我的全部数据
^{pr2}$我得到的是:
['XXC', 'XXc', 'XXC', 'XXc', 'aXX', 'aXc', 'aXX', 'aXc']
为什么案例忽略替换“A”?为什么它有时会取代C?(注意它是如何将“abC”变成“aXX”的。在
如果我这样做:
map(lambda s: re.sub(r'[^acAC]', "X", s), [ "ABC", "ABc", "AbC", "Abc", "aBC", "aBc", "abC", "abc" ])
我得到了我想要的:
['AXC', 'AXc', 'AXC', 'AXc', 'aXC', 'aXc', 'aXC', 'aXc']
我必须使用r'[^acAC]'??难道没有办法不区分大小写来补充正则表达式吗?在
我也很感兴趣,在vim中,如果我把所有这些字符串放到一个文本文件中
:%s/[^ac]/X/gi
我做对了。(而且,尽管这可能是亵渎神明的,如果我在perl中这样做:
#! /usr/bin/perl
use strict;
foreach my $gene ( "ABC", "ABc", "AbC", "Abc", "aBC", "aBc", "abC", "abc") {
my $replaced = $gene;
$replaced =~ s/[^ac]/X/gi;
printf("%s\n", $replaced);
}
我明白了
AXC
AXc
AXC
AXc
aXC
aXc
aXC
aXc
鲁比也是:
irb(main):001:0> ["ABC", "ABc", "AbC", "Abc", "aBC", "aBc", "abC", "abc"].collect{|s| s.gsub(/[^ac]/i,"X") }
=> ["AXC", "AXc", "AXC", "AXc", "aXC", "aXc", "aXC", "aXc"]
如果不执行r'[^acAC]',我如何在python中执行等效操作?在
谢谢!在
将
flags
作为关键字参数而不是位置参数传递:看着source code
^{pr2}$很明显,当您将
re.IGNORECASE
作为位置参数传递时,它实际上是传递给count
。可以通过以下错误进行验证:因此,当
^{4}$re.IGNORECASE
等于2时,输出为'XXC'
(只有两个项目被替换)。在相关问题 更多 >
编程相关推荐