python - 匹配某个词之后的字符,停止匹配这个同一个词之前的字符

标签 python regex

我希望正则表达式在出现某个单词后匹配所有字符,并在出现相同单词(或表达式结束)后停止匹配。例如,如果我想匹配“by”或“per”之后的每个字符,并在“by”或“per”再次出现时停止:

  • 按颜色和尺码订购我的衣服 => ['color and', 'size']
  • 您每周和每个类别的花费是多少? => ['周和', '类别?']

到目前为止,我已经完成了以下工作:

(by|per)\s(\w+)

但只给我一个字

最佳答案

你可以使用

\b(by|per)\s+(.*?)(?=\s*(?:\b(?:by|per)\b|$))

参见 regex demo

详情

  • \b - 单词边界
  • (by|per) - 第 1 组:byper
  • \s+ - 1+ 个空格
  • (.*?) - 第 2 组:除换行符以外的任何零个或多个字符,在第一次出现之前尽可能少...
  • (?=\s*(?:\b(?:by|per)\b|$)) - 一系列
    • \s* - 0+ 个空格
    • (?:\b(?:by|per)\b|$) - 两者之一
      • \b(?:by|per)\b - byper 整个单词
      • | - 或者
      • $ - 字符串结尾。

关于python - 匹配某个词之后的字符,停止匹配这个同一个词之前的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60013016/

相关文章:

java - 如何使用java提取字符串正则表达式?

regex - vim 将字符替换为\n

asp.net - 互联网电子邮件验证表达式验证一切

python - 如何在python中以二进制模式下载大文件?

python - 如何将 Python 程序转换为可运行的 .exe Windows 程序?

python - 迭代地减去数组中的值

python - 布朗聚类算法输出是什么意思?

python - 从 n 个元素生成所有 4 元组对

javascript - 无法匹配我的正则表达式

javascript - 正则表达式 : only match word if it doesn't start with a dot