我试图通过基于源模式进行区分大小写的替换来减少正则表达式比较的数量。
例如,如果我想检查是否有任何事件发生 ' cl',' co',' ca'或' cu'并将其替换为''' ko',' ka'或者' ku'我会用这些:
pattern = "c([loau])" - replace with "k$1"
但是,对于大写的C',我在搜索中使用大写C复制测试,因为替换需要以' K'
pattern = "C([loau])" - replace with "K$1"
我当然可以使用以下方法查找所有出现的内容:
pattern = "[Cc]([loau])"
但问题是,我不确定更换应该是哪种情况(大写或小写' k')。根据匹配模式的情况,替换字符串的形式会选择性地替换什么?
答案 0 :(得分:1)
让我们假设你使用这样的模式:
pattern = (?<prefix>.*)(?<toChange>[Cc])(?<rest>[loau])(?<suffix>.*)
您可以简单地构建一个由(伪代码)组成的新字符串:
replacementString = ${prefix} + changedCharConvertedToString + ${rest} + ${suffix}
其中changedCharConvertedToString
是已转换为${toChange}
的已捕获char
组,其中添加了8并转换回字符串。这是因为在ASCII字符中分配了它们各自的十进制值,并且相同的小写和大写字母之间的距离始终相同。如果您向字符'C'
添加8,则会获得'K'
。与使用小'c'
类似,您将获得'k'
。 Google for&#34; ASCII table&#34;如果你需要其他字母组合。