我需要從一行中獲取基於數字的字段,其中字段用空格分隔。現在的問題是,這些字段本身可能包含空格,但它們將在單引號中。需要基於用戶從一個變量而不是數組指定的位置獲取單個字段值
即:
$var="1 'abc def' 234 '' '456' 77 'ghi jkl mno p ' 99 ' q ' 88 ' r'";
如何抓abc def
,當用戶在位置1希望元素?
我需要從一行中獲取基於數字的字段,其中字段用空格分隔。現在的問題是,這些字段本身可能包含空格,但它們將在單引號中。需要基於用戶從一個變量而不是數組指定的位置獲取單個字段值
即:
$var="1 'abc def' 234 '' '456' 77 'ghi jkl mno p ' 99 ' q ' 88 ' r'";
如何抓abc def
,當用戶在位置1希望元素?
檢查Text::ParseWords核心模塊,
use Text::ParseWords;
my $var = "1 'abc def' 234 '' '456' 77 'ghi jkl mno p ' 99 ' q ' 88 ' r'";
my @words = quotewords('\s+', 0, $var);
# use Data::Dumper; print Dumper \@words;
my $position = 1;
print $words[$position]; # 'abc def'
Text :: ParseWords看起來非常好! –
這是一個很好的模塊,今天真的學到了有用的東西。 – DeVadder
Text :: ParseWords其實真的很好。感謝您的幫助。即使我今天學到了新東西 – user2702225
我的(未經測試)的方法是
use Data::Dumper;
my $var="1 'abc def' 234 '' '456' 77 'ghi jkl mno p ' 99 ' q ' 88 ' r'";
my @data = split("\s",$var);
my @result;
foreach my $substr (@data) {
s/[\"|\']//g;
push(@result,$_) unless $_ eq "";
}
print Dumper @data;
將返回這樣
@data = [
"1",
"abc def",
"234",
...
];
的東西,現在你可以訪問每一個通過簡單對象
$data[index];
棘手。我可能會檢查最好的信是否是一個單引號。然後我會'分裂(/'/,$ var);'並且根據第一個字母是一個引號,無論是偶數還是奇數索引都是引用的元素,而其他的必須在空格處進一步分割。並重新插入原來的位置... – DeVadder
哦,只是有一個更好的主意。如何先在空間分割,然後遍歷元素,檢查它們是否包含單引號,將這些元素與下一個元素合併,直到到達另一個帶引號的元素?如果Input沒有像''或'abc'這樣的字段,那麼可以工作,儘管這些情況當然可以單獨處理。 – DeVadder
字符串不一致 l – user2702225