如何在偶数位置替换字符(和奇数位置)

时间:2017-06-03 16:57:04

标签: regex replace str-replace

是否可以写下正则表达式,使得第一个$符号将替换为a(第二个带有a),第三个带有(等等?)

例如,字符串

This is an $example$ of what I want, $ 1+1=2 $ and $ 2+2=4$. 

应该成为

This is an (example) of what I want, ( 1+1=2 ) and ( 2+2=4). 

4 个答案:

答案 0 :(得分:1)

根据Ruby中已发布的答案https://stackoverflow.com/a/13947249/6332575,您可以使用

yourstring.gsub(“$”)。with_index(1){| _,i | i.odd? ? “(”:“)”}

答案 1 :(得分:0)

一种间接解决方案的排序,但在某些语言中,您可以使用callback function进行替换。然后,您可以循环浏览该功能中的选项。这也可以使用两个以上的选项。例如,在Python中:

// Scale pipe larger from center area only (i.e., don't scale pipe "caps")
if pipeDirection == .Up {
    pipe.centerRect = CGRect(x: 0, y: 0.2, width: 1.0, height: 0.4)
} else {
    pipe.centerRect = CGRect(x: 0, y: 0.8, width: 1.0, height: -0.4)
}
pipe.yScale = CGFloat(pipeDirection.rawValue) * 1.5

或者,如果它们总是成对出现,就像您的示例中的情况一样,您可以匹配>>> text = "This is an $example$ of what I want, $ 1+1=2 $ and $ 2+2=4$." >>> options = itertools.cycle(["(", ")"]) >>> re.sub(r"\$", lambda m: next(options), text) 'This is an (example) of what I want, ( 1+1=2 ) and ( 2+2=4).' 及其间的所有内容,然后替换$并重用这些内容在使用组引用$之间;但同样,并非所有语言都支持这些:

\1

答案 2 :(得分:0)

在R中,您可以使用str_replace(仅替换第一个匹配)和while循环来一次处理一对匹配。

user_in = input("Please enter a password next to this text: \n")
Password = hashlib.md5()
Password.update(user_in.encode("utf-8"))
Password.hexdigest()

它可能不是最有效的解决方案,但它会通过整个字符串来替换$和(和)。

答案 3 :(得分:0)

在JavaScript中:

function replace$(str) {
  let first = false;
  return str.replace(/\$/, _ => (first = !first) ? '(' : ')');
}