Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用re.sub替换第二个和最后一个字符_Python_Regex - Fatal编程技术网

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.doe
s=
不是字符串的一部分。为什么在
*
之后使用
import re
str = "F(foo)"
print(re.sub(r"F\((\w+)\)", r"F('\1')", str)) # F('foo')