提问者:小点点

将规则行下移特定行数


日安,

我没有编程背景,但进入记事本+黑客数据库的CAD软件,我们正在使用的工作。 这个论坛帮助我解决了很多以前的问题,但我似乎找不到正确的方法来解决目前我面临的问题。 提前感谢您的任何帮助!

我希望将特定的行移动到radius2>0(.*?)

        <LProfil>
            <ID>2</ID>
            <MATCHCODE>L 10x10x2,0</MATCHCODE>
            <Schenkela>10</Schenkela>
            <Schenkelb>10</Schenkelb>
            <Schenkelstaerke_S>2,0</Schenkelstaerke_S>
            <Radius1>0</Radius1>
            <Radius2>0</Radius2>
        </LProfil>
        <LProfil>
            <ID>3</ID>
            <MATCHCODE>L 12x12x2,0</MATCHCODE>
            <Schenkela>12</Schenkela>
            <Schenkelb>12</Schenkelb>
            <Schenkelstaerke_S>2,0</Schenkelstaerke_S>
            <Radius1>0</Radius1>
            <Radius2>0</Radius2>
        </LProfil>

所以目标结果是这样的

        <LProfil>
            <ID>2</ID>
            <Schenkela>10</Schenkela>
            <Schenkelb>10</Schenkelb>
            <Schenkelstaerke_S>2,0</Schenkelstaerke_S>
            <Radius1>0</Radius1>
            <Radius2>0</Radius2>
            <MATCHCODE>L 10x10x2,0</MATCHCODE>
        </LProfil>
        <LProfil>
            <ID>3</ID>
            <Schenkela>12</Schenkela>
            <Schenkelb>12</Schenkelb>
            <Schenkelstaerke_S>2,0</Schenkelstaerke_S>
            <Radius1>0</Radius1>
            <Radius2>0</Radius2>
            <MATCHCODE>L 12x12x2,0</MATCHCODE>
        </LProfil>

我已经使用regex命令以多种方式改变数据库,但无法找到将行下移的方法。 我尝试了以下操作:

-制作makro,同时使用键盘手动向下移动目标线。 我无法创造一个始终如一的makro来完成这项工作。

  • 使用\v特殊字符将行matchcode>(.*?)

_我还尝试在“查找内容”窗口中复制整个起始块,如下所示:

Find what:
<MATCHCODE>(.*?)</MATCHCODE>\n<Schenkela>(.*?)</Schenkela>\n<Schenkelb>(.*?)</Schenkelb>\n<Schenkelstaerke_S>1,0</Schenkelstaerke_S>\n<Radius1>0</Radius1>\n<Radius2>0</Radius2>
Replace with:
<Schenkela>\2</Schenkela>\n<Schenkelb>\3</Schenkelb>\n<Schenkelstaerke_S>10</Schenkelstaerke_S>\n<Radius1>0</Radius1>\n<Radius2>0</Radius2>\n<MATCHCODE>\1</MATCHCODE>

我知道最后一次尝试是相当愚蠢的,但那时候我知道我需要帮助解决我的问题,因为这里没有人知道如何编码,我在这里寻求帮助。

TLDR:我正在寻找一种方法,将一个带有重复出现的单词和随机数的行移动到一个现在的位置,向下移动一个设定的行数,或者在一个重复出现的行之后向下移动。

提前感谢您的任何帮助! 卢卡斯


共1个答案

匿名用户

下面是您可以做的:

lst = s.split('\n') # s is the string

for i,line in enumerate(lst):
    if "<MATCHCODE>" in line:
        lst.pop(i) # Remove that line
        lst.insert(i-3, line) # Insert that line 3 lines above its original position

print('\n'.join(lst))

为了更安全,您可以替换

if "<MATCHCODE>" in line:

ln = line.strip()
if ln[:11]=="<MATCHCODE>" and ln[-12:]=="</MATCHCODE>":