从字符串中获取带有字符索引的子字符串

时间:2019-02-28 12:43:25

标签: string perl substring

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

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

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

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

例如在Python中:

$function = $row[0:8]

会让我获得“ function1”

谢谢

SLP

2 个答案:

答案 0 :(得分:5)

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

public static void UnzipFiles()
    {

        string zipFilePath = @"BLA\BLA1\BLA2\ZIPFILE.zip";
        string extractedFilepath = @"BLA\BLA1\BLA2";

        ZipFile zipfile = ZipFile.Read(zipFilePath);
        if (!Directory.Exists(extractedFilepath))
        {
            Directory.CreateDirectory(extractedFilepath);
        }

        foreach (ZipEntry e in zipfile)
        {
            e.Extract(extractedFilepath, ExtractExistingFileAction.OverwriteSilently);
        }

    }

其中split内置使用正则表达式作为分隔符模式,我们告诉它用my $string = 'function1(par1, par2)'; my ($func_name, @params) = split /\s*\(\s*|\s*,\s*|\s*\)/, $string; (,分解字符串(我还包括右括号,这样最后一个元素就不会停留在该位置)。 regex模式还可能在周围散布一些空间。

如果您的)文件的字面含义与您显示的内容相同,则只需将以上内容应用于每行。如果每行上还有更多内容,则需要先对其进行预处理(或使用其他方法);如果行数超出显示的范围,请显示实际输入。

答案 1 :(得分: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