每 6 位使用正则表达式拆分字符串

Posted

技术标签:

【中文标题】每 6 位使用正则表达式拆分字符串【英文标题】:split string using regex every 6 digits 【发布时间】:2022-01-01 20:22:02 【问题描述】:

我基本上需要在接下来的6位数字和冒号之前分割一个字符串:

import re
my_str = '610640: 168 hours 610835: till next day 14:00 617041:  168 hours 611486:720 hours'
match = re.split(r'(\d6\:)', my_str)
print(match)
for item in match:
    print(item)

阅读610640: 168 hours610835: till next day 14:00617041: 168 hours等等。我尝试过的其他正则表达式:

(\d6\:)+.*?(\d6\:)

我一直在使用https://pythex.org/ 来了解如何编写正则表达式

【问题讨论】:

【参考方案1】:

有了匹配项,您就快到了,但是您应该将最后一部分转为前瞻而不是匹配项,并使用交替断言字符串的结尾来获取最后一项。

在这部分(\d6\:)+ 中,您可以省略组和重复,因为它只出现 1 次,冒号不必转义。

 \b\d6:.*?(?=\s*(?:\d6:|$))

查看regex demo

如果你想使用 re.split,你也可以使用:

(?<!^)\b(?=\d6:)

查看regex demo

import re
my_str = '610640: 168 hours 610835: till next day 14:00 617041:  168 hours 611486:720 hours'
match = re.split(r'(?<!^)\b(?=\d6:)', my_str)
print(match)
for item in match:
    print(item.strip())

输出

['610640: 168 hours ', '610835: till next day 14:00 ', '617041:  168 hours ', '611486:720 hours']
610640: 168 hours
610835: till next day 14:00
617041:  168 hours
611486:720 hours

如果总是有 1 个或多个前导空白字符,您可以匹配它们以拆分并省略单词边界:

match = re.split(r'\s+(?=\d6:)', my_str)

查看Python demo。

【讨论】:

谢谢 :) 我将检查您附加到正则表达式的每个选项,将在 10m 内接受答案。它的工作 100% :) 确实\s+(?=\d6:)应该够好了

以上是关于每 6 位使用正则表达式拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何使用正则表达式拆分字符串而不消耗拆分器部分?

当正则表达式的某些部分要保存在后续的分割字符串中时,如何使用正则表达式在R中拆分字符串?

15JS实现数字千分位格式化

拆分字符串,提取并添加到另一列正则表达式 BIGQUERY

php正则表达式字符串中提取数字,并截取其中的6位

使用正则表达式匹配所有以 4 位数字结尾的子字符串