尝试使用特定的正则表达式拆分字符串

Try to split a string with particular regex expression

我正在尝试使用 2 个分隔符和正则表达式拆分字符串。例如我的字符串是

"test 10 20 middle 30 - 40 mm".

我想分成 ["test 10",“20 中间 30”,“40 毫米”]。因此,splittin 会在 2 位数字之间删除 '-' 和 space。 我试过

result = re.split(r'[\d+] [\d+]', s)
> ['test 1', '0 middle 30 - 40 mm']

result2 = re.split(r' - |{\d+} {\d+}', s)
> ['test 10 20 middle 30', '40 mm']

['test 10', '20 middle 30', '40 mm'] 中是否有正则表达式拆分?

您可以使用

(?<=\d)\s+(?:-\s+)?(?=\d)

参见regex demo

详情

  • (?<=\d) - 数字必须紧跟在左边
  • \s+ - 1+ 个空格
  • (?:-\s+)? - - 后跟 1+ 个空格
  • 的可选序列
  • (?=\d) - 数字必须立即出现在右边。

Python demo

import re
text = "test 10 20 middle 30 - 40 mm"
print( re.split(r'(?<=\d)\s+(?:-\s+)?(?=\d)', text) )
# => ['test 10', '20 middle 30', '40 mm']

数据

k="test 10 20 middle 30 - 40 mm"

请尝试

result2 = re.split(r"(^[a-z]+\s\d+|\^d+\s[a-z]+|\d+)$",k)
result2

**^[a-z]** - 匹配字符串开头的小写字母并贪婪地向左 + 后跟:

 **`\s`** white space characters
 **`\d`** digits greedily matched to the left

| 或用数字匹配字符串的开头 \d+ 也贪婪地向左匹配并跟随通过:

  `**\s**` white space characters
   **`a-z`** lower case alphabets greedily matched to the left

| 或向左贪心匹配数字 \d+ 结束字符串 $

输出