对如何正确使用Regex感到困惑?

时间:2017-03-11 03:26:19

标签: java regex

因此,当谈到正则表达式时,我一直在寻找很多搜索,但是我仍然对如何设置它们感到困惑。我遇到的问题是我正在尝试转换从输入文件给出的给定文本:

(42, 10) d (23, 1) (123, 4) (32, 10) d (12, 9)

这样我就可以将它粘贴到一个String数组中,它看起来像这样:

[42, 10, d, 23, 1, 123, 4, 32, 10, d, 12, 9] 

任何提示?
我首先尝试使用分隔符来删除括号和逗号但是,分隔符将每个值放在一个完全独立的行上,这可能不是我的目标。我基本上试图忽略那些特殊字符,所以我可以将例如42分配给int a,将10分配给int b。

2 个答案:

答案 0 :(得分:0)

您使用的是哪种语言?编辑:nvm我看到你正在使用Java。前提仍然在于如何做到这一点,我将在Java版本中回复您。

在perl中,这很简单。

Node

Java版本:

use Data::Dumper;

my $var = "(42, 10) d (23, 1) (123, 4) (32, 10) d (12, 9)";

$var =~ s/\)/,/g;
$var =~ s/\(//g;
$var =~ s/d/d,/g;
$var =~ s/\s*//g;
my @arr = split /,/, $var;
print Dumper \@arr;

虽然我认为这并没有严格回答你的问题,因为它没有使用正则表达式。它只使用替换和拆分。

答案 1 :(得分:0)

如果您真的想要正则表达式,那么当您的数据更加复杂时,这会更好。

注意:我只是做字母数字数据,因为d似乎并不意味着什么特别的

Pattern p = Pattern.compile("[A-Za-z0-9]+");
Matcher m = p.matcher("(42, 10) d (23, 1) (123, 4) (32, 10) d (12, 9)");

String delim = ",";
StringBuffer sb = new StringBuffer("[");
while (m.find()) {
    sb.append(m.group()).append(delim);
}
sb.setLength(sb.length() - delim.length());
System.out.println(sb.append("]").toString());

输出

[42,10,d,23,1,123,4,32,10,d,12,9]

如果您想要保留这些数据,请使用List<String>