Python 使用re.sub替换第二个和最后一个字符
我有一个字符串Python 使用re.sub替换第二个和最后一个字符,python,regex,Python,Regex,我有一个字符串“F(foo)”,我想将该字符串替换为“F('foo')”。我知道我们也可以在第二个参数中使用正则表达式,并使用re.sub(r“F\(foo\)”、r“F\('foo'\)”、str)进行替换。但这里的问题是,foo是一个动态字符串变量。每次我们想更换时,情况都不一样。是否有可能通过某种正则表达式,以更干净的方式进行这种替换 我记得有一种方法是使用()提取foo,然后使用.group(1)。但这需要我再定义一个临时变量来存储foo。我很好奇是否有一种方法可以将“F(foo)”替换
“F(foo)”
,我想将该字符串替换为“F('foo')”
。我知道我们也可以在第二个参数中使用正则表达式,并使用re.sub(r“F\(foo\)”、r“F\('foo'\)”、str)进行替换。但这里的问题是,foo是一个动态字符串变量。每次我们想更换时,情况都不一样。是否有可能通过某种正则表达式,以更干净的方式进行这种替换
我记得有一种方法是使用()
提取foo,然后使用.group(1)
。但这需要我再定义一个临时变量来存储foo。我很好奇是否有一种方法可以将“F(foo)”
替换为“F('foo')”
,用一行或更简洁的方式
示例:
F(名称)
应替换为F('name')
。
F(id)
应替换为F('id')
。
G(名称)不应替换。
因此,正则表达式应该是r“F\(\w)+\)”
来查找这样的字符串。使用re.sub
例:
输出:
F('foo')
以下正则表达式将有效的[Python | C | Java]标识符括在F之后,并用单引号括在括号中:
re.sub(r"F\(([_a-z][_a-z0-9]+)\)", r"F('\1')", s, flags=re.I)
#"F('foo')"
有几种方法,这取决于foo实际上是什么。
如果它不能包含(
或)
,您可以将(
替换为('
和)
替换为)
。否则,请尝试使用
re.sub(r"F\((.*)\)", r"F('\1')", yourstring)
如果替换部件中的\1
将引用模式F\(\w)+\
中搜索正则表达式中的(.*)
捕获组,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')
您可能不需要正则表达式。在这种情况下,您是否希望在开始括号和结束括号之后和之前分别使用引号?您可以在此处执行字符串替换。你能给我更多的数据样本吗?这样就更清楚是否需要正则表达式了。你想从字符串中删除s=
?这是不可能的,因为在字符串中,我只想在有F(foo)
的地方进行替换。我们应该保持原样@gmds@j.does=
不是字符串的一部分。为什么在*
之后使用?
?
import re
str = "F(foo)"
print(re.sub(r"F\((\w+)\)", r"F('\1')", str)) # F('foo')