我想使用Python语言中的正则表达式修改toml文件中指定字段中的参数值.例如,在[tool. poetry]字段中交换值name,而不是[tool. pytest. ini_Options]字段中交换值name.

[tool.poetry]
version = "0.1.0"
description = "python is good"
name = "template-python"
readme = "README.md"
packages =[
    {include="projectname"}
]

[tool.poetry.dependencies]
python = ">=3.11,<3.13"


[tool.poetry.group.test.dependencies]
pytest = "^8.0.0"


[tool.pytest.ini_options]
pythonpath = "."
addopts = ["-v", "-s", "--import-mode=importlib"]
name = "hello"

Python代码:

def tereg():
    with open('pyproject.toml', 'r', encoding='utf-8') as f:
        r = f.read()
    reg_name = r'(?<=name = ").*(?=")'
    # reg_name = r'(\[tool\.poetry\][\s\S]*?)name = "(.*)"([\s\S]*?[(\r\n)|\n]\[.*?\])'
    re.sub(reg_name, "nameofproject", r)

运行代码时,它更改了两个位置的值[TOOL.POLITY]和[TOOL.PYTEST.INOPTIONS],但我只想更改[TOOL.POLITY]中的值name.如何编写正则表达式reg_name?谢谢.😊

推荐答案

您可以使用用途:

(\[tool\.poetry](?:\n(?!\[[^][]*]).*)*\nname = ")[^"\n]*(?=")
  • ( Capture group 1
    • \[tool\.poetry]
    • (?:\n(?!\[[^][]*]).*)*匹配所有不以[...]开头的行
    • \nname = "匹配换行符,然后是name = "
  • )个封闭组1
  • [^"\n]*匹配"或新行以外的可选字符
  • (?=")断言"向右

在替换中使用捕获组1的值:

\1nameofproject

Python demo.com/r/xsvNgM/1" rel="nofollow noreferrer">regex demo和Python demo.

Python相关问答推荐

当多个值具有相同模式时返回空

如何使用matplotlib在Python中使用规范化数据和原始t测试值创建组合热图?

django禁止直接分配到多对多集合的前端.使用user.set()

海上重叠直方图

Pandas—在数据透视表中占总数的百分比

Plotly Dash Creating Interactive Graph下拉列表

为什么np. exp(1000)给出溢出警告,而np. exp(—100000)没有给出下溢警告?

pandas:对多级列框架的列进行排序/重新排序

在不同的帧B中判断帧A中的子字符串,每个帧的大小不同

python sklearn ValueError:使用序列设置数组元素

Gunicorn无法启动Flask应用,因为无法将应用解析为属性名或函数调用.'"'' "

Tensorflow tokenizer问题.num_words到底做了什么?

如何使用Azure Function将xlsb转换为xlsx?

我可以不带视频系统的pygame,只用于游戏手柄输入吗?''

Regex用于匹配Python中逗号分隔的AWS区域

TypeError:';Locator';对象无法在PlayWriter中使用.first()调用

Numpy`astype(Int)`给出`np.int64`而不是`int`-怎么办?

如何在基于时间的数据帧中添加计算值

关于数字S种子序列内部工作原理的困惑

如何通过函数的强式路径动态导入函数?