当前位置: 首页 > 面试题库 >

Python正则表达式:单词集的替代

姚凯歌
2023-03-14
问题内容

我们知道\ba\b|\bthe\b会匹配单词“ a ”或“ the ”,
我想构建一个正则表达式来匹配像这样的模式

的/一个/一个原因/原因

这意味着我要匹配s包含3个单词的字符串:

  • 的第一个单词s应为“ a ”,“ the ”或“ one
  • 第二个单词应该是“ 原因 ”或“ 原因
  • 的第三个字s应为“ ”或“

正则表达式\ba\b|\bthe\b|\bone\b \breason\b|reasons\b \bfor\b|\bof\b无济于事。

我怎样才能做到这一点?顺便说一句,我使用python。谢谢。


问题答案:

正则表达式模块的一个有趣功能是命名列表。有了它,您就不必|在非捕获组中包括多个由分隔的选项。您只需要在列表之前定义列表,并通过名称在模式中引用它即可。例:

import regex

words = [ ['a', 'the', 'one'], ['reason', 'reasons'], ['for', 'of'] ]

pattern = r'\m \L<word1> \s+ \L<word2> \s+ \L<word3> \M'
p = regex.compile(pattern, regex.X, word1=words[0], word2=words[1], word3=words[2])

s = 'the reasons for'

print(p.search(s))

即使此功能不是必需的,它也可以提高可读性。

如果您|在之前加入项目,则可以通过re模块实现类似的功能:

import re

words = [ ['a', 'the', 'one'], ['reason', 'reasons'], ['for', 'of'] ]

words = ['|'.join(x) for x in words]

pattern = r'\b ({}) \s+ ({}) \s+ ({}) \b'.format(*words)

p = re.compile(pattern, re.X)


 类似资料:
  • 问题内容: 我正在尝试以的形式找到网页上的所有链接,或者我做了一个正则表达式,并且可以正常工作: 但是,有没有更短的写方法呢?我重复了:// [^ / \“] + /两次,可能没有必要。我尝试了各种方法,但是没有用。我尝试了: 很明显,我在这里缺少了一些东西,或者我只是对Python正则表达式不够了解。 问题答案: 您正在使用捕获组,并在使用捕获组时改变其行为(它只会返回捕获组的内容)。您的正则表

  • 问题内容: 我在为以下情况找到正确的正则表达式时遇到了麻烦: 可以说: 我想匹配整个单词-例如应该返回,因为这不是一个单词,并且应该返回,因为在左右两侧都没有字母字符。 问题答案: 尝试 从文档: 匹配空字符串,但仅匹配单词的开头或结尾。 请注意,该模块使用的简单定义作为“字母数字或下划线字符的序列”,其中“字母数字”取决于语言环境或选项。 另请注意,如果没有原始字符串前缀,则被视为“退格”,而不

  • 假设我有以下字符串 在所有应用程序上使用regex,是否有可能 i、 e.替换包含单词的模式的正则表达式,例如,从上面的被

  • 问题内容: 我需要替换字符串的一部分。我浏览了Python文档并发现了re.sub。 我期望这能打印,而不是“酒吧”。 谁能告诉我我做错了什么? 问题答案: 除了捕获要 替换 的零件外,您还可以捕获要 保留 的零件,然后使用引用对其进行引用以将它们包括在替换字符串中。 尝试以下方法: 另外,假设这是HTML,则应考虑使用HTML解析器来执行此任务,例如Beautiful Soup 。

  • 我正在使用以替换子字符串 我现在面临的问题是,只有在字符串替换不支持的情况下,我才想要替换整个单词。< br >因为我必须替换非常非常大的字符串,可能以GB为单位。与字符串替换相比,正则表达式非常慢。< br >例如:text: - 正则表达式将时间缩短了近 100 倍(https://medium.com/codezillas/golang-replace-vs-regexp-de4e48482

  • 我正在尝试抓取模式中第一个连字符之后的文本 但在此模式中: 我希望它跳过‘不想要的’文本,并匹配的文本后面的下一个连字符(DesiredText)。我创建了一个具有两种模式regex101,并需要修改我的基本regex,以便如果中存在一个或多个我不想匹配的单词,那么它将匹配第二个连字符文本: https://regex101.com/r/vesqh3/1