我正在尝试从.txt文件中获取信息:
function1(par1, par2)
function2(par1)
function3(par1, par2, par3)
例如,我想将第一行“ function1”作为字符串,将“ par1”和“ par2”作为字符串。
我现在可以从字符串中提取模式,但是我想知道是否有可能使用其字符索引来获取子字符串。
例如在Python中:
$function = $row[0:8]
会让我获得“ function1”
谢谢
SLP
答案 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