Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何合并这两个正则表达式?_Python_Re - Fatal编程技术网

Python 如何合并这两个正则表达式?

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的新

我想将这两种模式合并为一种模式,然后可以使用“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的新模式。这是用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', '.']