1

我有类似的字符串

Client Name:##USERNAME## Age:##AGE## xyzed

我要拆分是这样的

[Client Name:][##USERNAME##][ Age:][##AGE##][ xyzed]

我尝试了(?=(##(\\w+)##))它返回的这个正则表达式

[Client Name:][##USERNAME## Age:][##AGE## xyzed]

如在java中后视不适用于可变长度,因此不能使用

(?=(##(\\w+)##))|(?<=(##(\\w+)##))
4

2 回答 2

3

如果您对巨大的硬编码上限感到满意,这将起作用:

(?=##\\w+##)|(?<=##\\w{1,1000}##)

(我还删除了一些多余的括号)

这个:

String string = "Client Name:##USERNAME## Age:##AGE## xyzed";
String regex = "(?=##\\w+##)|(?<=##\\w{1,1000}##)";
String[] arr = string.split(regex);
System.out.println(Arrays.asList(arr));

印刷:

[Client Name:, ##USERNAME##,  Age:, ##AGE##,  xyzed]

测试

这是另一种选择,但它可能对输入过于具体:

(?=##\\w)|(?= )(?<=##)

它也有效

于 2013-05-22T13:00:42.877 回答
0

这应该可以正常工作,并且只涉及全局替换:

String Name = "Client Name:##USERNAME## Age:##AGE## xyzed";
String[] parts = Name.replaceAll(":##",":@##").replaceAll("## ",":##@ ").split("@");
System.out.println(Arrays.asList(parts));

印刷:

[Client Name:, ##USERNAME:##,  Age:, ##AGE:##,  xyzed]

这很容易阅读,但可能比杜克林的回答要慢。

于 2013-05-22T13:15:32.147 回答