我们知道\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.替换包含单词的模式的正则表达式,例如,从上面的被
我正在使用以替换子字符串 我现在面临的问题是,只有在字符串替换不支持的情况下,我才想要替换整个单词。< br >因为我必须替换非常非常大的字符串,可能以GB为单位。与字符串替换相比,正则表达式非常慢。< br >例如:text: - 正则表达式将时间缩短了近 100 倍(https://medium.com/codezillas/golang-replace-vs-regexp-de4e48482
问题内容: 我需要替换字符串的一部分。我浏览了Python文档并发现了re.sub。 我期望这能打印,而不是“酒吧”。 谁能告诉我我做错了什么? 问题答案: 除了捕获要 替换 的零件外,您还可以捕获要 保留 的零件,然后使用引用对其进行引用以将它们包括在替换字符串中。 尝试以下方法: 另外,假设这是HTML,则应考虑使用HTML解析器来执行此任务,例如Beautiful Soup 。
我正在尝试抓取模式中第一个连字符之后的文本 但在此模式中: 我希望它跳过‘不想要的’文本,并匹配的文本后面的下一个连字符(DesiredText)。我创建了一个具有两种模式regex101,并需要修改我的基本regex,以便如果中存在一个或多个我不想匹配的单词,那么它将匹配第二个连字符文本: https://regex101.com/r/vesqh3/1