无法使用正则表达式使用单词或空格边界提取所有单词



我需要提取双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-Catb', 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-Catb', 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'

少了点什么?你能解释一下什么是错误的,什么是正确的方法吗?

使用环顾来提取空格边界内的单词:

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

查看在线正则表达式演示

  • (?<!S) - 空格或字符串开头必须紧挨出现在当前位置的左侧
  • Male-Cat - 要搜索的术语
  • (?!S) - 空格或字符串末尾必须立即出现在当前位置的右侧

由于 (?<!S)(?!S) 是零宽度断言,因此不会使用空格,并且会找到连续的匹配项。