我发现很难为这个问题找到合适的标题。因此,如果它具有误导性,如果您能帮助改进它,我将不胜感激。
我已经提取了xml文件属性的值,现在我有输出,如下面的示例行所示:
category:buffer overflow analyzer:data flow analyzer:buffer
我需要将其拆分为
category:buffer overflow
analyzer:data flow
analyzer:buffer
我不确定如何使用Java,Perl或Python完成此操作。
到目前为止,我所拥有的只是一个简单的Perl脚本,将其拆分为“:”。
所有建议都会有所帮助。
答案 0 :(得分:5)
合适的正则表达式将起作用。这是Python re
模块的实现:
import re
s = 'category:buffer overflow analyzer:data flow analyzer:buffer'
print(re.findall(r"(\w+:[\w ]+)(?: |$)", s))
#prints ['category:buffer overflow ', 'analyzer:data flow', 'analyzer:buffer']
答案 1 :(得分:3)
这个 sed 单行程在这里工作:
sed -r 's/ ([^ ]+:)/\n\1/g' input
试验:
kent$ echo "category:buffer overflow analyzer:data flow analyzer:buffer" |sed -r 's/ ([^ ]+:)/\n\1/g'
category:buffer overflow
analyzer:data flow
analyzer:buffer
此 java 行也适用于此处:
System.out.println("category:buffer overflow analyzer:data flow analyzer:buffer".replaceAll("\\s([^\\s]+:)", "\n$1"));
另一个 python 行:
In [1]: import re
In [2]: s = 'category:buffer overflow analyzer:data flow analyzer:buffer'
In [3]: print re.sub(r"\s(?=[^\s]*:)",'\n',s)
category:buffer overflow
analyzer:data flow
analyzer:buffer
答案 2 :(得分:1)
在Java中,这将是这样的:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Extractor {
/**
* @param args
*/
public static void main(String[] args) {
Pattern pattern = Pattern
.compile("(\\w+:[\\w ]+)(?: |$)");
Matcher matcher = pattern
.matcher("category:buffer overflow analyzer:data flow analyzer:buffer");
while (matcher.find()) {
System.out.println(matcher.group());
}
}
}
答案 3 :(得分:1)
在perl:
$s = "category:buffer overflow analyzer:data flow analyzer:buffer";
$s .= " ";
@keyz = split(/:[A-Za-z\d\s]*\s/, $s);
print "@keyz\n";
@params = split(/[A-Za-z\d]*:/, $s);
print "@params\n";
生成数组@keyz =(“category”,“analyzer”,“analyzer”)和array @params =(“缓冲区溢出”,“数据流”,“缓冲区”)