Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式(regex)-如何按字符串中出现的前X位数拆分字符串?_Python_Regex - Fatal编程技术网

Python 正则表达式(regex)-如何按字符串中出现的前X位数拆分字符串?

Python 正则表达式(regex)-如何按字符串中出现的前X位数拆分字符串?,python,regex,Python,Regex,我一直在努力寻找合适的正则表达式(Python)来满足我的需求: 我想根据6位数字的第一个位置分割一个字符串 比如说- stringA = 'abcdf123456789' 理想情况下将被切割成- StringB='abcdf123456' StringC='789' 到目前为止,这是我提出的解决方案: x = re.split("(?=[0-9])", stringA) 然后在计算字符时循环计算结果 非常感谢您的帮助 您可以使用maxslit=1在6位数字上拆分,并捕

我一直在努力寻找合适的正则表达式(Python)来满足我的需求:

我想根据6位数字的第一个位置分割一个字符串

比如说-

stringA = 'abcdf123456789'
理想情况下将被切割成-

StringB='abcdf123456'
StringC='789'
到目前为止,这是我提出的解决方案:

x = re.split("(?=[0-9])", stringA)
然后在计算字符时循环计算结果


非常感谢您的帮助

您可以使用
maxslit=1在6位数字上拆分,并捕获拆分的组,然后您可以轻松构建字符串:

import re

stringA = 'abcdf123456789'
split = re.split(r'(\d{6})', stringA, maxsplit=1)
# split is now ['abcdf', '123456', '789']
stringB = ''.join(split[:2])
stringC = split[2]

print(stringB)
print(stringC)

# abcdf123456
# 789
重新导入
stringA='abcdf123456789'
结果=重新拆分((?使用查找:

>>> stringA = 'abcdf123456789'
>>> re.split(r'(?<=\d{6})', stringA, maxsplit=1)
['abcdf123456', '789']
stringA='abcdf123456789'
>>>关于拆分(r’(?您可以将此代码用于两个捕获组:

>>重新导入
>>>stringA='abcdf123456789'
>>>[(stringB,stringC)]=re.findall(r'(.'?\d{6})(.''),stringA)
>>>打印(stringB)
abcdf123456
>>>打印(stringC)
789

您只需使用
findall()
组aka'()'
即可找到您需要的东西

import re

stringA = 'abcdf123456789'
pattern = r"([\D]*\d{6})(.*)"

result = re.findall(pattern, stringA)
print(result)
#output [('abcdf123456', '789')]

这是不可能通过正则表达式实现的,因为状态机太复杂了。在第一个捕获组的末尾总是有6个连续的数字吗?是的@anubhava,总是有6个连续的数字,但后面可能有另一个字符串。我有点困惑于这样的评论,即不可能通过正则表达式实现。虽然可能是更好的方法,我会说,对于所示的示例
(?请始终对您的代码进行解释,为什么它比其他解决方案更好,以及它是如何工作的?
>>> stringA = 'abcdf123456789'
>>> re.split(r'(?<=\d{6})', stringA, maxsplit=1)
['abcdf123456', '789']
import re

stringA = 'abcdf123456789'
pattern = r"([\D]*\d{6})(.*)"

result = re.findall(pattern, stringA)
print(result)
#output [('abcdf123456', '789')]