Regex 正则表达式将字符串拆分为;但不是amp;

Regex 正则表达式将字符串拆分为;但不是amp;,regex,Regex,我有一个字符串需要用分号分开。最简单的方法是[^;]+。通过使用此选项,字符串中的每个分号都将用作分隔符 然而,在我们的字符串中,有一些“&”,我们不想包括在内;作为分隔符 例如,字符串 abcd;efg;hij&amp;kl;mn 预期结果将是abcd、efg、hij&;吉隆坡,明尼苏达州 有人能帮我解决这个问题吗?如果你的正则表达式风格允许,那么就用否定的眼光看后面 (?<!&amp); 如果要匹配“real;s”之外的所有内容: 会有用的。或(?:&\w+;

我有一个字符串需要用分号分开。最简单的方法是
[^;]+
。通过使用此选项,字符串中的每个分号都将用作分隔符

然而,在我们的字符串中,有一些“&”,我们不想包括在内;作为分隔符

例如,字符串

abcd;efg;hij&amp;kl;mn
预期结果将是
abcd、efg、hij&;吉隆坡,明尼苏达州


有人能帮我解决这个问题吗?

如果你的正则表达式风格允许,那么就用否定的眼光看后面

(?<!&amp);

如果要匹配“real
s”之外的所有内容:

会有用的。或
(?:&\w+;|[^;])+
,如果不仅仅是
&实体是预期的

如果您的正则表达式引擎支持拆分操作,那么这个正则表达式(仅当前面没有
时才匹配分号)也是一个好主意

(?<!&amp);
(?
为了也允许像上面这样的其他实体,如果您的正则表达式实现支持内部无限重复,则可以使用
(?)。大多数都不支持,.NET是一个例外

在Python中:

>>> import re
>>> re.findall("(?:&amp;|[^;])+", "abcd;efg;hij&amp;kl;mn")
['abcd', 'efg', 'hij&amp;kl', 'mn']
>>> re.split("(?<!&amp);", "abcd;efg;hij&amp;kl;mn")
['abcd', 'efg', 'hij&amp;kl', 'mn']
>>重新导入
>>>关于findall(“(?:&;|[^;])+”,“hij&;kl;mn”)
['abcd','efg','hij&;kl','mn']

>>>关于split((?我认为更好的方法是解码字符串(例如在.NET方法中,我不知道您的平台),然后按
拆分

正则表达式:

(?<!&[^;]+);
(?

它不仅会忽略
&;
,还会忽略任何其他以
&
开头并以
结尾的HTML/XML特殊符号。这是一个很好的方法,但是,由于代码的限制,我无法执行任何操作来解码字符串。无论如何,谢谢。
>>> import re
>>> re.findall("(?:&amp;|[^;])+", "abcd;efg;hij&amp;kl;mn")
['abcd', 'efg', 'hij&amp;kl', 'mn']
>>> re.split("(?<!&amp);", "abcd;efg;hij&amp;kl;mn")
['abcd', 'efg', 'hij&amp;kl', 'mn']
(?<!&[^;]+);