我有一个需要用分号拆分的字符串。最简单的方法是使用[^;]+
。通过使用这种方式,字符串中的每个分号都会被用作定界符。
然而,在我们的字符串中,有一些"&",我们不希望将其作为分隔符包含在内。
例如,一个字符串:
abcd;efg;hij&kl;mn
期望的结果应该是
abcd, efg, hij&kl, mn
有人能帮我解决这个问题吗?我有一个需要用分号拆分的字符串。最简单的方法是使用[^;]+
。通过使用这种方式,字符串中的每个分号都会被用作定界符。
然而,在我们的字符串中,有一些"&",我们不希望将其作为分隔符包含在内。
例如,一个字符串:
abcd;efg;hij&kl;mn
abcd, efg, hij&kl, mn
有人能帮我解决这个问题吗?HttpUtility.HtmlDecode
方法,我不知道您使用的平台),然后按 ;
进行分割。(?<!&[^;]+);
&
,还会忽略以&
开头、以;
结尾的任何其他HTML/XML特殊符号。(?<!&);
在Regexr上在线查看
只有在分号前没有&
时才会匹配
这里是一个使用split的Java示例
String str = "abcd;efg;hij&kl;mn";
String[] Result = str.split("(?<!&);");
如果你想匹配除了 "real ;
s" 之外的所有内容:
(?:&|[^;])+
如果只需要匹配&
实体,则可以使用&(?!#\d+;)
正则表达式。或者,如果需要匹配多个实体,则可以使用(?:&\w+;|[^;])+
。
如果您的正则表达式引擎支持拆分操作,那么也许这个正则表达式(仅在不以&
为前缀时匹配分号)也是一个好主意。
(?<!&);
为了允许像上面这样的其他实体,如果您的正则表达式实现支持后行断言中的非确定重复,则可以使用(?<!&\w+);
。大多数情况下不支持,但.NET是一个例外。
在Python中:
>>> import re
>>> re.findall("(?:&|[^;])+", "abcd;efg;hij&kl;mn")
['abcd', 'efg', 'hij&kl', 'mn']
>>> re.split("(?<!&);", "abcd;efg;hij&kl;mn")
['abcd', 'efg', 'hij&kl', 'mn']