【问题标题】:Get substring from string with the index of the characters使用字符索引从字符串获取子字符串
【发布时间】:2019-07-22 09:20:12
【问题描述】:

我正在尝试从 .txt 文件中获取信息:

function1(par1, par2)
function2(par1)
function3(par1, par2, par3)

例如,我想将第一行的“function1”作为字符串,将“par1”和“par2”作为字符串。

我现在可以从字符串中提取模式,但我想知道是否可以使用其字符的索引来获取子字符串。

例如在 Python 中:

$function = $row[0:8]

会给我“function1”

谢谢,

SLP

【问题讨论】:

  • 你想得到什么?据我所知,你可以在 perl 中使用子字符串做同样的事情......
  • 我想把字符串分成不同的子字符串。例如,理想情况下,我会将“function1”作为变量中的字符串,“par1”和“par2”在其他变量中
  • 如果你的输入在每一行都有更多——或者不同的行与你显示的混合——这对任何方法都有影响;如果是这样,请更新问题。 (在我的回答中,我假设您只需要如图所示处理行,)

标签: string perl substring


【解决方案1】:

解析函数调用的编程文本,如示例输入所示

my $string = 'function1(par1, par2)';

my ($func_name, @params) = split /\s*\(\s*|\s*,\s*|\s*\)/, $string;

其中split builtin 使用正则表达式作为分隔符模式,我们告诉它用(,) 分解字符串(我还包括右括号,以便最后一个元素不会被它困住)。正则表达式模式也有可能散布的空格。

如果您的 .txt 文件具有与您显示的内容类似的行,那么您可以简单地将上述内容应用于每一行。如果每行都有更多内容,那么您需要先对其进行预处理(或使用不同的方法);如果行数超过显示的内容,请显示实际输入。

【讨论】:

    【解决方案2】:

    如果您想要与 Python 示例相同的行为,substr 函数将满足您的需求。

    代码:

    my $a = "function1(par1, par2)";
    print substr $a, 0, 8
    

    产生“函数”作为输出

    根据您的评论“我想将字符串分成不同的子字符串”,如果您有可变数量和长度的函数参数,则正则表达式是迄今为止最好的方法。

    while (<>) {
      if (/^([^\(]*)\(([^\)]*)\)/) {
        my $f=$1;
        my @params=split ",", $2;
        print "Function: $f, Params: @params\n";
      }
    }
    

    给定输入

    function1(par1, par2)
    function2(par1)
    function3(par1, par2, par3)
    

    此代码将打印

    Function: function1, Params: par1  par2
    Function: function2, Params: par1
    Function: function3, Params: par1  par2  par3
    

    【讨论】:

    • 好的,谢谢。我已经尝试过了,但我一定是在某个地方出错了,因为它没有产生预期的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 2022-08-19
    • 1970-01-01
    • 2012-10-30
    • 2011-11-21
    • 2023-03-11
    相关资源
    最近更新 更多