假设我使用Perl的split函数来分割文件的内容。
例如:
This foo file has+ a bunch of; (random) things all over "the" place
因此,假设我想使用空格和分号作为分隔符。
所以我会使用类似的东西:
split(/([\s+\;])/, $fooString)
我无法弄清楚语法(或者即使它存在)来捕获分号并丢弃空格。
答案 0 :(得分:4)
你似乎要求像
这样的东西my @fields_and_delim = split /\s+|(;)/, $string; # not quite right
但这并不是它看起来的样子。它还会返回空元素(带有警告),因为当\s+
匹配时,()
只会捕获$1
,但仍会按要求返回undef
,而my @fields_and_delim = grep { defined and /\S/ } split /(\s+|;)/, $string;
。当你的分隔符聚集在字符串中时,还有更多的虚假匹配。
所以过滤
my @fields_and_delim = $string =~ /([^\s;]+|;+)/g;
在这种情况下,您通常可以捕获分隔符。
这也可以使用正则表达式
完成;
在这种情况下,可以更好地控制从字符串中选择的内容和方式。
如果需要单独捕获重复的;+
,请将;
更改为{{1}}
答案 1 :(得分:0)
我认为你想要的就像:
submitButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent submit) {
String[] selectedUniversities = uniList.getSelectedValuesList().toArray(new String[] {});
}
});
这将在split /\s*;\s*/, $fooString;
字符周围分开,该字符可能会或可能不会在之前或之后有任何空格。
在你的例子中:
;
它会分成:
>This foo file has+ a bunch of; (random) things all over "the" place<
和
>This foo file has+ a bunch of<
顺便说一句,您需要将>(random) things all over "the" place<
的结果放入数组中;例如:
split
然后my @parts = split /\s*;\s*/, $fooString;
和$parts[0]
会有两位。
答案 2 :(得分:0)
我认为grep
正是您真正想要的,过滤列表中不是所有空格的值:
my @all_exc_ws = grep {!/^\s+$/} split(/([\s\;])/, $fooString);
此外,我从你的正则表达式中删除了+
,因为它位于[]
内,这改变了它的含义。