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