为什么不能将两个正则表达式与`|`合并为一个?

时间:2019-05-25 11:20:08

标签: python regex

为什么不能将两个正则表达式与|一起使用?

re.findall(r"[a-z]+-[a-z]+", text, re.MULTILINE) 
re.findall(r"[a-z]{2,}", text, re.MULTILINE) 

组合的一个表达式。

re.findall(r"[a-z]+-[a-z]+|[a-z]{2,}", text, re.MULTILINE) 

我发现r"[a-z]+-[a-z]+|[a-z]{2,}"无法表达r"[a-z]+-[a-z]+"[a-z]{2,}吗?

@pkqxdd等正则表达式([a-z]+-[a-z]+)|([a-z]{2,})不等于 [a-z]+-[a-z]+[a-z]{2,},这是我的证明。
请安装textrac并准备一个示例pdf文件进行测试。

import textract, re
text = textract.process("sample.pdf").decode() 
text = text.lower()
totalWords1 = re.findall(r"[a-z]+-[a-z]+", text, re.MULTILINE) 
totalWords2 = re.findall(r"[a-z]{2,}", text, re.MULTILINE) 
totalWords = totalWords1 + totalWords2
totalWords3 = re.findall(r"([a-z]+-[a-z]+)|([a-z]{2,})", text, re.MULTILINE) 
totalWords4 = re.findall("([a-z]+-[a-z]+)|([a-z]{2,})", text, re.MULTILINE)     
len(totalWords)
len(totalWords3)
len(totalWords4)

在这里显示我的实验。

>>> len(totalWords)
243322
>>> len(totalWords3)
240397
>>> len(totalWords4)
240397

enter image description here

1 个答案:

答案 0 :(得分:-2)

您可能需要对它们进行分组,否则您的|仅在[a-z]+[a-z]{2,}上工作,正如其他人指出的那样,它们重叠。

([a-z]+-[a-z]+)|([a-z]{2,})

这应该可以解决问题。