我有一个字符串"F(foo)"
,我想用"F('foo')"
替换该字符串。我知道我们也可以在第二个参数中使用正则表达式,并使用re.sub(r"F\(foo\)", r"F\('foo'\)",str)
进行替换。但是这里的问题是,foo是一个动态字符串变量。每次我们要进行替换时,情况都会有所不同。是否可以通过某种正则表达式以更清洁的方式进行此类替换?
我记得一种使用()
然后使用.group(1)
提取foo的方法。但这需要我再定义一个临时变量以存储foo。我很好奇是否有一种方法可以用一行"F(foo)"
替换"F('foo')"
或换句话说以一种更简洁的方式替换
示例:
F(name)
应该替换为F('name')
。
F(id)
应该替换为F('id')
。
G(name)不应替换。
因此,正则表达式将是r"F\((\w)+\)"
才能找到这样的字符串。
答案 0 :(得分:2)
使用re.sub
例如:
import re
s = "F(foo)"
print(re.sub(r"\((.*)\)", r"('\1')", s))
输出:
F('foo')
答案 1 :(得分:0)
以下正则表达式将有效的[Python | C | Java]标识符用F括起来,并在括号中用单引号引起来:
re.sub(r"F\(([_a-z][_a-z0-9]+)\)", r"F('\1')", s, flags=re.I)
#"F('foo')"
答案 2 :(得分:0)
有几种方法,具体取决于foo是什么。
如果它不能包含(
或)
,则可以将(
替换为('
,将)
替换为')
。否则,请尝试使用
re.sub(r"F\((.*)\)", r"F('\1')", yourstring)
替换部分中的\1
将引用搜索正则表达式中的(.*)
捕获组
答案 3 :(得分:0)
在模式F\((\w)+\)
中,您快到了,只需在+
后面放置量词\w
即可重复匹配1个以上的单词字符。
如果将其放在捕获组之后,请重复该组,这将为您提供捕获组中最后一次迭代的值,该值将是foo中的第二个o
。
您可以将表达式更新为:
F\((\w+)\)
在替换中,使用\1
F('\1')
例如:
import re
str = "F(foo)"
print(re.sub(r"F\((\w+)\)", r"F('\1')", str)) # F('foo')