我有一个行这样这个Perl正则表达式有什么问题?
NF419andZNF773 (e=10^-92,).
ZNF571 (e=2 10^-14,)
什么是正则表达式,用于提取上述结果,这样它给
NF419andZNF773 - 10^-92
ZNF571 - 2 10^-14
我试过,但失败。
$line =~ /(\w+)\s\(e=\s(.*),\)/;
print "$1 - $2\n";
我有一个行这样这个Perl正则表达式有什么问题?
NF419andZNF773 (e=10^-92,).
ZNF571 (e=2 10^-14,)
什么是正则表达式,用于提取上述结果,这样它给
NF419andZNF773 - 10^-92
ZNF571 - 2 10^-14
我试过,但失败。
$line =~ /(\w+)\s\(e=\s(.*),\)/;
print "$1 - $2\n";
你很接近,你的正则表达式的结尾是失败的,因为它期望指数前的空格。试试这个:
$line =~/(\w+) \s+ \(e= ([^,]+) /x;
@ES:似乎没有工作。 – neversaint 2010-04-15 02:01:31
@neversaint =>我忘记了'x'修饰符,因为我在正则表达式中增加了空间,使它更具可读性。现在试试 – 2010-04-15 02:03:11
感谢百万埃里克。 – neversaint 2010-04-15 02:05:45
其实你可以做这一切正则表达式,尝试
$line =~ s/\(\s*e\s*=\s*([^,]+),\)/-$1/
正则表达式匹配(E = NUM ^指数)的字符串的一部分,虽然这样做,它抓住了num^exponent(在$ 1中),然后用$ 1替换整个匹配。
您的正则表达式没有返回所需的结果。这将做到这一点:$ line =〜s/^(\ w +)。+? =([^,] +),。+/$ 1 - $ 2/x – 2010-04-15 10:48:19
哦,我忽略了所需的' - '插入。要做到这一点,只需在$ 1之前添加' - '(并根据需要为格式设置尽可能多的空格)。我会编辑我的答案以反映这一点。顺便说一句,你不需要修改文本的方法效率较低。仅仅关注你需要替换的东西就足够了。感谢修正虽然 - )。 – Jasmeet 2010-04-15 17:55:57
“...捕获文本的方法...”如果你的意思是用“^”锚定,你可以通过锚定获得很多速度,无论是在模式的开始还是结束。我在一些不同的搜索方式上做了基准测试,包括做index(),这对我有很大的帮助。 – 2010-04-27 19:57:49
可能的重复http://stackoverflow.com/questions/2642149/converting-numeric-string-into-perls-processable-number – 2010-04-15 09:45:44