2

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

“测试 10 20 中间 30 - 40 毫米”。

我想分成[“test 10”,“20 middle 30”,“40 mm”]。因此,拆分删除 ' - ' 和 2 位数字之间的空格。我试着做

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'] 中是否有要拆分的 reg 表达式?

4

2 回答 2

2

您可以使用

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

请参阅正则表达式演示

细节

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

请参阅Python 演示

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']
于 2020-04-09T10:57:43.587 回答
1

数据

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+字符串的左端$

输出 在此处输入图像描述

于 2020-04-09T12:50:37.530 回答