我希望正则表达式在出现某个单词后匹配所有字符,并在出现相同单词(或表达式结束)后停止匹配。例如,如果我想匹配“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 组:by
或per
词\s+
- 1+ 个空格(.*?)
- 第 2 组:除换行符以外的任何零个或多个字符,在第一次出现之前尽可能少...(?=\s*(?:\b(?:by|per)\b|$))
- 一系列\s*
- 0+ 个空格(?:\b(?:by|per)\b|$)
- 两者之一\b(?:by|per)\b
-by
或per
整个单词|
- 或者$
- 字符串结尾。
关于python - 匹配某个词之后的字符,停止匹配这个同一个词之前的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60013016/