小编ato*_*c44的帖子

在 Perl 替换中使用包含文字转义的字符串变量

我是 Perl 新手,我发现了我不理解且无法解决的行为。

\n\n

我正在制作一个小型查找和替换程序,我需要做一些事情。我有一堆文件需要处理。然后我在外部文本文件中有一个查找/替换规则列表。在替换那里我需要三个特殊的东西:

\n\n
    \n
  • 替换 utf-8 字符(捷克语变音符号)

  • \n
  • 添加/删除行(因此在吸食模式下工作)

  • \n
  • 使用正则表达式

  • \n
\n\n

我想要一个单独运行的程序,所以我编写了它,以便它需要三个参数:

\n\n
    \n
  • 要处理的文件
  • \n
  • 寻找什么
  • \n
  • 换什么。
  • \n
\n\n

我正在从 bash 脚本循环发送参数,该脚本解析规则列表并加载其他文件。

\n\n

我的问题是当我"\\n"在规则列表中有一个字符串并将其发送到 Perl 脚本时。如果它位于替换的第一部分(在查找部分),它会正确查找换行符,但当它位于第二部分(替换部分)时,它只会打印而\\n不是换行符。

\n\n

我尝试将"\\n"字符串硬编码到变量中,而不是从列表中传递它,然后它工作正常。

\n\n

Perl 不解释该"\\n"字符串的原因是什么?我怎样才能让它工作?

\n\n

这是我的代码:

\n\n

list.txt - 外部替换列表中的一行

\n\n
1\\. ?\\\\n?N\xc3\x81ZEV P\xc5\x98\xc3\x8dPRAVKU;\\\\n<<K1>> N\xc3\x81ZEV P\xc5\x98\xc3\x8dPRAVKU;\n
Run Code Online (Sandbox Code Playgroud)\n\n

farkapitoly.shlist.txt - 用于解析和循环所有文件并调用 Perl 脚本的bash 脚本

\n\n
...\nFILE="/home/tmp.txt"\nwhile read LINE\ndo\n   FIND=`echo "$LINE" | awk -F $\';\' \'BEGIN {OFS …
Run Code Online (Sandbox Code Playgroud)

regex perl replace

5
推荐指数
1
解决办法
2219
查看次数

在函数内部还是外部循环?

当一次处理更多对象(但可以选择仅处理一个对象)时,哪种方法更好呢?

A:内部功能循环

可以使用一个或多个对象调用函数,并且该函数在函数内部进行迭代:

    class Object:
        def __init__(self, a, b):
            self.var_a = a
            self.var_b = b

        var_a = ""
        var_b = ""

    def func(obj_list):
        if type(obj_list) != list:
            obj_list = [obj_list]

        for obj in obj_list:
            # do whatever with an object
            print(obj.var_a, obj.var_b)

    obj_list = [Object("a1", "a2"), Object("b1", "b2")]
    obj_alone = Object("c1", "c2")

    func(obj_list)
    func(obj_alone)
Run Code Online (Sandbox Code Playgroud)

B:圈外功能

函数仅处理一个对象,并且在处理多个对象时必须多次调用。

    class Object:
        def __init__(self, a, b):
            self.var_a = a
            self.var_b = b

        var_a = ""
        var_b = ""

    def func(obj):
        # do whatever with …
Run Code Online (Sandbox Code Playgroud)

python loops function python-3.x

0
推荐指数
2
解决办法
4060
查看次数

标签 统计

function ×1

loops ×1

perl ×1

python ×1

python-3.x ×1

regex ×1

replace ×1