我必须将Java String解析为3个独立的案例:
"PREFIX(<signed_float>)=<Some_alpha_num_string>"
,我需要将<signed_float>
提取到一个(Double
)变量中,将<Some_alpha_num_string>
提取到另一个(String
)变量中忽略其余的。"PREFIX=<Some_alpha_num_string>"
,我会保存<Some_alpha_num_string>
并将Double
设置为默认值(例如0.0
)所以我猜#1和#2的正则表达式是PREFIX[\(]?[-]?[0-9]*\.?[0-9]*[\)]?=\S*
,但是如何使用它来提取这两个部分呢?
%e
&#34;)符号
更新:有点澄清:PREFIX
是固定字符串。所以有效字符串的例子是:
PREFIX=fOo1234bar
- 我需要提取fOo1234bar
PREFIX(-1.23456)=SomeString
- 此处我需要提取-1.23456
和SomeString
PREFIX(0.20)=1A2b3C
- 此处我需要提取0.20
和1A2b3C
答案 0 :(得分:1)
鉴于你的正则表达式,我会假设<signed_float>
不支持科学记数法。
用于匹配{/ 3}}的javadoc中列出的float / double的正则表达式。
在这种情况下,Double.valueOf(String)将是:
PREFIX Matching exact letters "PREFIX"
(?: Start optional section
\( Matching exact character "("
( Start content capture #1 <signed_float>
[+-]? Matches optional sign
(?: Start choice section
\d+\.?\d* Matches <digits> ["."] [<digits>]
| Choice separator
\.\d+ Matches "." <digits>
) End choice section
) End content capture #1
\) Matching exact character ")"
)? End optional section
= Matching exact character "="
(\S*) Capture #2 <Some_alpha_num_string>
或者作为字符串:
"PREFIX(?:\\(([+-]?(?:\\d+\\.?\\d*|\\.\\d+))\\))?=(\\S*)"
让我们测试一下:
public static void main(String[] args) {
test("PREFIX=fOo1234bar");
test("PREFIX(-1.23456)=SomeString");
test("PREFIX(0.20)=1A2b3C");
test("sadfsahlhjladf");
}
private static void test(String text) {
Pattern p = Pattern.compile("PREFIX(?:\\(([+-]?(?:\\d+\\.?\\d*|\\.\\d+))\\))?=(\\S*)");
Matcher m = p.matcher(text);
if (! m.matches())
System.out.println("<do nothing>");
else if (m.group(1) == null)
System.out.println("'" + m.group(2) + "'");
else
System.out.println(Double.parseDouble(m.group(1)) + ", '" + m.group(2) + "'");
}
输出:
'fOo1234bar'
-1.23456, 'SomeString'
0.2, '1A2b3C'
<do nothing>
答案 1 :(得分:0)
IF 我理解你要做的事情:
我会为&#34; PREFIX()=&#34; case,和另一个&#34; PREFIX =&#34;。我会用第一个测试;如果它适合,则执行逻辑,如果不适合,则尝试下一个。这给你两个更简单的正则表达式担心。从执行带有Pattern的检查返回的Matcher为您提供匹配的字符串的长度等,因此您可以使用原始字符串上的子字符串来提取您已找到的内容。
你不能说PREFIX是固定大小的;如果没有,那么组可以帮助您将PREFIX与浮动变量分开。请记住:使用正则表达式比你试图解决的问题变得更难。
&#34;我遇到了问题,决定用正则表达式来解决它。现在我遇到了两个问题&#34;。