Python 如何合并这两个正则表达式?
我想将这两种模式合并为一种模式,然后可以使用“split”函数根据统一的正则表达式拆分文本。怎么做?是否存在某种模式联合操作,例如:Python 如何合并这两个正则表达式?,python,re,Python,Re,我想将这两种模式合并为一种模式,然后可以使用“split”函数根据统一的正则表达式拆分文本。怎么做?是否存在某种模式联合操作,例如: p1 = re.compile(r"https?:[^\s]+[a-zA-Z0-9]") p2 = re.compile("([\u4E00-\u9FD5a-zA-Z0-9+#&\._%\-]+)", re.U) p1是匹配URL字符串的模式,p2是基于某些字符将文本拆分为块的模式。我想得到一个匹配p1或p2的新
p1 = re.compile(r"https?:[^\s]+[a-zA-Z0-9]")
p2 = re.compile("([\u4E00-\u9FD5a-zA-Z0-9+#&\._%\-]+)", re.U)
p1是匹配URL字符串的模式,p2是基于某些字符将文本拆分为块的模式。我想得到一个匹配p1或p2的新模式。这是用Python编写的
举例说明:
p = p1 + p2
如果我只应用p2,文本将分为:
text = This is a https://www.stackoverflow.com/posts/32244/edits example.
我不想分割URL,我想得到以下区块:
['This', ' ', 'is', ' ', 'a', ' ','https', '://', 'www.stackoverflow.com', '/', 'posts', '/', '32244', '/', 'edits', 'example']
这就是为什么我想为URL保持模式添加p1。我上面用p=p1+p2进行的描述可能不准确。我认为拆分操作在这里不合适——通过声明所需的子模式而不是将它们分隔在何处更容易确定匹配。尽管等级库有待推断,但您的组似乎是:
+
)\bhttp
开头且不包含空格的任何字符序列(\bhttp[^]+
)\b\w+
)\b[\S\W]+
)['This',' ', 'is', ' ', 'a', ' ', 'https://www.stackoverflow.com/posts/32244/edits', ' ', 'example', '.']
你在找
|
?就像在,pat1 | pat2
中一样,它匹配一种模式或另一种模式。@ggorlen没有理由不能回答这个问题。@ggorlen,是的。如何将“|”应用于上述两种模式?@TimBiegeleisen似乎太琐碎而无法回答。这肯定是个骗局,还是不值得一玩。另外,我也不完全清楚OP希望基于这个问题进行交替而不是串联@marlon将这两种模式替换为pat1
和pat2
。当然,您首先需要更具体的模式,然后再回到不太具体的模式。我将尝试您的模式,但有理由尝试坚持原来的p2模式,因为这是针对非英语文本的,但我使用上面的英语文本来说明这个想法。请询问您的实际规格。如果您过分看重它,您可能会得到不准确的答案,因为我无法知道。你能发布一个小的,有代表性的实际文本片段和相应的预期输出吗?你的回答很有帮助。剩下的我会弄清楚的。实际的一个很复杂,我不能给出一个小而完整的例子。如果你能用“|”来写你的答案,我可能更愿意在我的例子中使用它。我只想根据p2定义的这些分隔符进行拆分,如果它是一个URL,我不想拆分URL中的任何内容。清楚了吗@戈伦
>>> re.findall(r" +|\bhttp[^ ]+|\b\w+|\b[\S\W]+", text)
['This', ' ', 'is', ' ', 'a', ' ', 'https://www.stackoverflow.com/posts/32244/edits', ' ', 'example', '.']