python - 正则表达式:在一个字符串中找到很多模式
问题描述
我有一个字符串
деревня Лесное, деревня Пальмово, село Поляково, город Стерлитамак
期望输出
['деревня Лесное', 'деревня Пальмово', 'село Поляково']
我尝试使用
villages_compiler = re.compile(r"""\b^(?:[Дд]еревня|[Сс]ело|[Рр]азъезд|[ДдСсПпХх]|[Сс]т|[Дд]ер|[Пп]ос([её]лок|[Кк]оллективный сад)?|[Пп]гт|[Рр]\.?\s?[Пп]|[Сc]адовое товарищество|ДНП|ДНТ|ДПК|ДТ|ЖК|СТ|СНТ|СПК|СО|СК)(?:\.|\s|\.\s)(?:\«?|\"?)[\w\s\.-]+(?:\»?|\"?)""" \
r"""|\b^[\w\s-]+(?:[Сс]ельсовет|[Шш]оссе)""")
re.findall(villages_compiler, "деревня Лесное, деревня Пальмово, село Поляково, город Стерлитамак")
但它返回一个空列表。当我更改findall()
为search()
我只得到деревня Лесное
我该如何解决这个问题?
解决方案
编辑2:
确保您删除了两个^
s 并将前面提到的怪异组更改为非捕获。
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+ 中运行它,并且您的正则表达式中没有任何拼写错误。
编辑:
- 如前所述,您需要摆脱
^
模式中的 s 。 - 你把它
[Пп]ос([её]лок|[Кк]оллективный сад)?
变成了一个捕获组,组括号的位置也很奇怪。
我最终得到了这种模式(保持怪异的组但使其不被捕获)。让我知道它是否有效。
原帖:你有一个^
字符串字符的开头并且只传递一个字符串。
如果你从这两个地方删除它,你会得到你想要的输出吗?
此外,根据文档搜索仅查找模式的第一个位置。
推荐阅读
- javascript - Javascript 数组给出的长度不正确,输出不一致
- sql - 选择要在查询或表单中显示为列的附加数据/值
- powershell - Get-ChildItem Cert:\(本地执行)与 Invoke-Command 结果差异混淆?
- javascript - Mapping and filtering a nested object
- asp.net - Entity Framework Core Join 标识 AspNetUser 表。自定义表/实体的 AspNetUser Id
- javascript - Gatsby/GraphQL 在代码中的行为与 GraphiQL 不同
- facebook - 是否有任何 API 可以使用电话号码获取 Facebook 个人资料 URL?
- android - 如何设置 KeyboardAvoidingView 键盘垂直偏移背景颜色?
- python - 下一页 Selenium/BeautfulSoup 中用于抓取电子商务网站的迭代
- java - 如何使用 JNI 将 Java Vector 转换为 std::vector