我有一个字符串
деревня Лесное, деревня Пальмово, село Поляково, город Стерлитамак
期望输出
['деревня Лесное', 'деревня Пальмово', 'село Поляково']
我尝试使用
villages_compiler = re.compile(r"""\b^(?:[Дд]еревня|[Сс]ело|[Рр]азъезд|[ДдСсПпХх]|[Сс]т|[Дд]ер|[Пп]ос([её]лок|[Кк]оллективный сад)?|[Пп]гт|[Рр]\.?\s?[Пп]|[Сc]адовое товарищество|ДНП|ДНТ|ДПК|ДТ|ЖК|СТ|СНТ|СПК|СО|СК)(?:\.|\s|\.\s)(?:\«?|\"?)[\w\s\.-]+(?:\»?|\"?)""" \
r"""|\b^[\w\s-]+(?:[Сс]ельсовет|[Шш]оссе)""")
re.findall(villages_compiler, "деревня Лесное, деревня Пальмово, село Поляково, город Стерлитамак")
但是它返回一个空列表。
当我将findall()
更改为search()
时,只会得到деревня Лесное
如何解决该问题?
答案 0 :(得分:1)
Edit2:
确保从中删除了两个^
,并将前面提到的怪异组更改为不捕获。
s = 'деревня Лесное, деревня Пальмово, село Поляково, город Стерлитамак'
expr = r'\b(?:[Дд]еревня|[Сс]ело|[Рр]азъезд|[ДдСсПпХх]|[Сс]т|[Дд]ер|[Пп]ос(?:[её]лок|[Кк]оллективный сад)?|[Пп]гт|[Рр]\.?\s?[Пп]|[Сc]адовое товарищество|ДНП|ДНТ|ДПК|ДТ|ЖК|СТ|СНТ|СПК|СО|СК)(?:\.|\s|\.\s)(?:\«?|\"?)[\w\s\.-]+(?:\»?|\"?)|\b[\w\s-]+(?:[Сс]ельсовет|[Шш]оссе)'
re.findall(expr, s)
在python 3.6中给我以下输出:
['деревня Лесное', 'деревня Пальмово', 'село Поляково']
与
相同comp = re.compile(expr)
comp.findall(s)
请确保您正在python 3+中运行此程序,并且正则表达式中没有任何错字。
编辑:
^
。[Пп]ос([её]лок|[Кк]оллективный сад)?
设置为捕获组,并且该组括号的位置也显得很奇怪。我最后得到了this pattern(保留了一个奇怪的组,但使它不被捕获)。让我知道它是否有效。
原始帖子:
您有一个^
字符串字符的开头,并且仅传递了一个字符串。
如果从两个地方都将其删除,会得到所需的输出吗?
此外,as per docs搜索仅查找图案的第一个位置。
答案 1 :(得分:0)
就像@nhahtdh所说的那样,有一种findall
的方法villages_compiler
,所以:
villages_compiler.findall(your_string)