我有一個看起來像這樣的字符串:String a = "name:string, age:int, address:string,city:string, zip:int";字符串由,and分隔,:它之間是fieldNameand type。每個值之間可能有空格,但應(yīng)忽略任何空格。我想要的是將這個字符串轉(zhuǎn)換成一個只有 contents 的 arrayList fieldName。所以上面的例子會變成List<String> result = new ArrayList<>;結(jié)果中應(yīng)該有 的值name, age, address, city, zip。其他一切都應(yīng)該被忽略。我如何使用 Java 中的正則表達式執(zhí)行此操作?我可以通過首先執(zhí)行拆分然后將,字符串?dāng)?shù)組拆分:,然后將數(shù)組的第一個元素添加到列表中來實現(xiàn)這一點。我問的原因是因為我想知道是否有更優(yōu)雅的方法來使用正則表達式來做到這一點。
2 回答

蠱毒傳說
TA貢獻1895條經(jīng)驗 獲得超3個贊
String[] b = a.split(":[^,]+(?:, *)?");
或者:
String[] b = Pattern.compile("[^, ]+(?=:)").matcher(a).results() .map(r -> r.group()).toArray(String[]::new);

蝴蝶刀刀
TA貢獻1801條經(jīng)驗 獲得超8個贊
以下正則表達式將為您提供所需的結(jié)果
[a-z]+[^,?](?=:)
第一個括號稱為向前看,因此將選擇 : 之前的任何內(nèi)容,第一組括號表示我們需要任何字符 az(注意這些區(qū)分大小寫,因此如果可以使用大寫,請?zhí)砑?+[AZ]),最后一組括號表示不,或空格
要在 Java 中使用它,您需要按照以下方式編寫一些內(nèi)容
Pattern.compile("[a-z]+[^,?](?=:)") ???????.matcher(a) ???????.find();
添加回答
舉報
0/150
提交
取消