나는 임의의 길이의 소문자로 된 문자와 숫자 (정수 또는 부동 소수점)가 교대로 반복되는 문자열을 가지고 있는데, 각 부분으로 나누고 싶습니다. 부분이 문자열 또는 (문자열을 나타내는 문자열) 숫자로 구성 될 수 있도록 가능한 최대 크기.글자와 숫자로 구성된 문자열을 부분으로 나눕니다.
지수, 16 진수 등과 같은 특별한 형태의 숫자는 고려할 필요가 없습니다. 단순한 부동 소수점 또는 정수.
몇 가지 예 :
>>> split("")
()
>>> split("p")
('p',)
>>> split("2")
('2',)
>>> split("a2b3")
('a', '2', 'b', '3')
>>> split("a2.1b3")
('a', '2.1', 'b', '3')
>>> split("a.1b3")
('a', '.1', 'b', '3')
그러나, 다음의 호출은 몇 가지 오류가 발생한다 : 내 첫 번째 시도는 re.split
을 사용했다
>>> split(3)
>>> split("a0.10.2")
>>> split("ab.c")
. 그러나이 시도는 매우 순진하고, 나는이 편지를 만들 경우에는 구분 기호를 저장하지 않습니다 : 내 두 번째 시도 itertools.groupby
을 사용했다
>>> re.split("[a-z]", "a.1b3")
['', '.1', '3']
합니다.
>>> islowalpha = labmda s: str.isalpha(s) and str.islower(s)
>>> [''.join(g) for _, g in itertools.groupby("a0.10.2b", islowalpha)] # should raise
['a', '0.10.2', 'b']
참고 : 문제는, 예를 들어, 숫자의 형태에 대해 신경, 그렇게하지 않는다는 것입니다 내가 한이 반복 가능한 한, 출력의 형태에 대해 걱정하지 않는다.
참고 :this을 읽었지만 문제를 해결할 수 없습니다. 가장 큰 차이점은 숫자와 포인트의 단순한 목록이 아닌 허용 가능한 숫자 만 허용해야한다는 것입니다.
' "a0.10.2"'뭐가 문제 그것은' "a2.1b3"'에서 다른 이유는 무엇입니까? –
'0.10.2'는 숫자가 아니기 때문에; 숫자와 하위 문자열을 번갈아 사용하는 하위 문자열도 아닙니다. – Bach
알 수없는 '교대'제한이 있습니다. –