2017-10-16 53 views
1

我需要提取双Male-Cat用正则表达式字边界 - 不能提取所有的词

a = "Male-Cat Male-Cat Male-Cat-Female" 
b = re.findall(r'(?:\s|^)Male-Cat(?:\s|$)', a) 
print (b) 
['Male-Cat '] 

c = re.findall(r'\bMale-Cat\b', a) 
print (c) 
['Male-Cat', 'Male-Cat', 'Male-Cat'] 

我需要提取树倍Male-Cat

a = "Male-Cat Male-Cat Male-Cat" 
b = re.findall(r'(?:\s|^)Male-Cat(?:\s|$)', a) 
print (b) 
['Male-Cat ', ' Male-Cat'] 

c = re.findall(r'\bMale-Cat\b', a) 
print (c) 
['Male-Cat', 'Male-Cat', 'Male-Cat'] 

这是正确的第一种方式解析另一个字符串:

a = 'Male-Cat Female-Cat Male-Cat-Female Male-Cat' 
a = 'Male-Cat-Female' 
a = 'Male-Cat' 

有什么遗漏吗?你能解释什么是错的,什么是正确的方法?

回答

4

使用lookarounds提取空白边界之内的话:

r'(?<!\S)Male-Cat(?!\S)' 

online regex demo

详细

  • (?<!\S) - 一个空白或开始字符串必须立即出现在左的当前位置
  • Male-Cat - 术语来搜索
  • (?!\S) - 一个空白或字符串的结尾必须立即出现在当前的位置

的右侧。由于(?<!\S)(?!\S)都是零宽度断言,空格不会被消耗,并且连续匹配将被找到。

+0

请参阅[在线Python演示](https://ideone.com/5CZf8P)。 –