Jadi saya telah melihat banyak pencarian ketika datang ke ekspresi regex, namun saya masih cukup bingung tentang cara mengaturnya. Masalah yang saya alami adalah saya mencoba mengonversi teks yang diberikan ini dari file input:

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

Sedemikian rupa sehingga saya dapat menempelkannya ke dalam array String yang terlihat seperti ini:

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

Ada tips?
Saya mencoba menggunakan pembatas pada awalnya untuk menghilangkan tanda kurung dan koma, namun pembatas menempatkan setiap nilai pada seluruh baris terpisah yang sayangnya bukan itu yang saya tuju. Saya pada dasarnya mencoba untuk mengabaikan karakter khusus itu sehingga saya dapat menetapkan misalnya 42 ke int a, dan 10 ke int b.

0
ArcWerd 11 Maret 2017, 06:26

2 jawaban

Jawaban Terbaik

Bahasa apa yang Anda gunakan? EDIT: nvm Saya melihat Anda menggunakan Java. Premis masih ada tentang bagaimana melakukannya, saya akan kembali kepada Anda sedikit dengan versi Java.

Dalam Perl ini akan sangat sederhana.

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;

Versi Jawa:

    String content = "(42, 10) d (23, 1) (123, 4) (32, 10) d (12, 9)";
    String[] split = null;

    split = content.replace(")",",").replace("(","").replace("d","d,").replace(" ","").split(",");

    for (String a : split)
    {
        System.out.println(a);
    }

Meskipun saya kira ini tidak sepenuhnya menjawab pertanyaan Anda, karena tidak menggunakan regex. Itu hanya menggunakan ganti dan split.

0
FredMan 11 Maret 2017, 03:42

Jika Anda benar-benar menginginkan regex, maka ini berfungsi lebih baik ketika ada lebih banyak kompleksitas dalam data Anda.

Catatan: Saya hanya melakukan data alfanumerik, karena d sepertinya tidak berarti sesuatu yang istimewa

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());

Keluaran

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

Gunakan List<String> jika Anda ingin menyimpan data tersebut.

0
OneCricketeer 11 Maret 2017, 04:01