【问题标题】:Python substitute with numbering inside patternsPython 替换为模式内的编号
【发布时间】:2015-09-14 16:29:53
【问题描述】:

我正在尝试编写一个 python 脚本来自动为 pandoc markdown 中的脚注编号。给定这样的输入:

这是一个测试文档,仅用于测试目的。[^0] 这是一个测试 仅用于测试目的的文档。这是用于测试的测试文档 仅供参考。[^121][^5] 这是一个用于测试目的的测试文档 仅限。

[^0]:脚注内容。

[^0]:脚注内容。

[^0]:脚注内容。

它应该产生这样的输出:

这是一个测试文档,仅用于测试目的。[^1] 这是一个测试 仅用于测试目的的文档。这是用于测试的测试文档 仅供参考。[^2][^3] 这是一份用于测试目的的测试文档 仅限。

[^1]:脚注内容。

[^2]:脚注内容。

[^3]:脚注内容。

我已经能够使基本功能正常工作,但我一直在思考如何在一行中包含两个脚注的情况。也许循环不应该是基于行的?或者我应该选择某种嵌套循环,替换第 n 次出现的模式(据我了解,this 问题不是微不足道的)?

由于我试图从中尽可能多地学习,请随时放弃任何 cmets 或指针以进行进一步改进。谢谢!

这是我目前的脚本:

import re
from sys import argv

script, first = argv

i=0
n=0
buff = ''

# open the file specified through the first argument
f = open(first, 'rU')

for line in f:
    if re.search(r'\[\^[0-9]+\]:', line):
        i += 1
        line2 = re.sub(r'\[\^[0-9]+\]:', '[^' + str(i) + ']:', line)
        buff += line2

    elif re.search(r'\[\^[0-9]+\]', line):
        n += 1
        line3 = re.sub(r'\[\^[0-9]+\]', '[^' + str(n) + ']', line)
        buff += line3

    else:
        buff += line

print buff

f.close()

【问题讨论】:

    标签: python loops substitution


    【解决方案1】:
    my_text="""This is a testing document for testing purposes only.[^0] This is a testing document for testing purposes only. This is a testing document for testing purposes only.[^121][^5] This is a testing document for testing purposes only.
    
    [^0]: Footnote contents.
    
    [^0]: Footnote contents.
    
    [^0]: Footnote contents."""
    
    
    num_notes = len(re.findall("\[\^\d+\]",my_text))
    i = -1 
    def do_sub(m):
        global i
        i+=1
        return "[^%d]"%(i if i < num_notes//2 else i-num_notes//2)
    
    re.sub("\[\^\d+\]",do_sub,my_text)
    

    我认为会做你想做的事

    【讨论】:

    • 这似乎不起作用。尝试在最后一行之后 print my_text 或将最后一行分配给一个变量然后打印它,但它总是打印原始(非编号)内容。而且我无法理解return 行(括号中的部分),所以我真的无法弄清楚出了什么问题。
    • 那是因为重新。 Sub 返回一个新字符串
    • 好的,但是当我执行print re.sub("\[^\d+\]",do_sub,my_text)(例如,类似于here 的执行方式)时,我仍然得到原始的未编号输入。这是为什么呢?
    • 刚试了下,没啥区别。我会完全粘贴我所做的,但这超出了评论的允许长度。也许我应该提到我使用 Python 2.7.9 ? (Ubuntu 15.04 上的默认设置)
    • 哦,当你是完全正确的......我忘了逃避^它应该是\^......看到这个ideone草图ideone.com/9R8c3m..编辑答案现在更正它
    猜你喜欢
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 2020-07-11
    相关资源
    最近更新 更多