gpt4 book ai didi

python - Python中Regex的一些问题

转载 作者:太空宇宙 更新时间:2023-11-04 08:20:44 25 4
gpt4 key购买 nike

我想做一些文本转换,比如从文本文件中读入:

CONTENTS
1. INTRODUCTION
1.1 The Linear Programming Problem 2
1.2 Examples of Linear Problems 7

并写入另一个文本文件:

("CONTENTS" "#") 
("1. INTRODUCTION" "#")
("1.1 The Linear Programming Problem 2" "#11")
("1.2 Examples of Linear Problems 7" "#16")

我目前用于此类转换的 Python 代码是:

infile = open(infilename)
outfile = open(outfilename, "w")

pat = re.compile('^(.+?(\d+)) *$',re.M)
def zaa(mat):
return '("%s" "#%s")' % (mat.group(1),str(int(mat.group(2))+9))

outfile.write('(bookmarks \n')
for line in infile:
outfile.write(pat.sub(zaa,line))
outfile.write(')')
  1. 它将原始文本转换为

    CONTENTS
    1. INTRODUCTION
    ("1.1 The Linear Programming Problem 2" "#11")
    ("1.2 Examples of Linear Problems 7" "#16")

    最后两行是正确的,但是前两行不是。所以我想知道如何容纳前两行,通过修改当前代码,或使用一些不同的代码?

  2. 代码不是我写的,而是我想了解用法re.sub() 在这里。正如我发现的一个 Python 网站,

    re.sub(regex, replacement, subject) performs a search-and-replace across subject, replacing all matches of regex in subject with replacement. The result is returned by the sub() function. The subject string you pass is not modified.

    但是在我的代码中,它的用法是`pat.sub(zaa,line)',这似乎我与引用的不一致描述。所以我想知道如何了解我的代码中的用法?

谢谢!

最佳答案

使用您的正则表达式,您正在搜索以数字结尾的行(可能还有尾随空格)。您可以将数字设为可选:^(.+?(\d+)?) *$ 并确保 zaa 中的第 2 组引用可以处理空字符串。

def zaa(mat):
return '("%s" "#%s")' % (mat.group(1), (str(int(mat.group(2))+9) if mat.group(2) else "") )

有了这个,当 mat.group(2) 为空时,你应该得到“#”,当它不为空时,你当前得到的是什么。

关于python - Python中Regex的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5527223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com