带有正则表达式的单词边界 - 无法提取所有单词
Word boundary with regex - cannot extract all words
我需要提取双倍 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'
少了什么?你能解释一下什么是错误的,什么是正确的方法吗?
使用环视提取空白边界内的单词:
r'(?<!\S)Male-Cat(?!\S)'
详情
(?<!\S)
- 空格或字符串开头必须立即出现在当前位置的左侧
Male-Cat
- 要搜索的字词
(?!\S)
- 空格或字符串结尾必须立即出现在当前位置的右侧
由于 (?<!\S)
和 (?!\S)
是零宽度断言,因此不会消耗空格,并且会找到连续的匹配项。
我需要提取双倍 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'
少了什么?你能解释一下什么是错误的,什么是正确的方法吗?
使用环视提取空白边界内的单词:
r'(?<!\S)Male-Cat(?!\S)'
详情
(?<!\S)
- 空格或字符串开头必须立即出现在当前位置的左侧Male-Cat
- 要搜索的字词(?!\S)
- 空格或字符串结尾必须立即出现在当前位置的右侧
由于 (?<!\S)
和 (?!\S)
是零宽度断言,因此不会消耗空格,并且会找到连续的匹配项。