font: bold 13 Arial
->13
처럼 문자열에서 숫자를 가져 오려고합니다. 이 작업을 수행하는 가장 우아하고 파이썬적인 방법은 무엇입니까?문자열에서 숫자를 찾는 우아한 방법은 무엇입니까?
그러나 숫자의 "컨텍스트"도 필요합니다. 그때 나는 다시 그것을 변경하려는 원본 (예 : font: bold 13 Arial
->font: bold 14 Arial
)
font: bold 13 Arial
->13
처럼 문자열에서 숫자를 가져 오려고합니다. 이 작업을 수행하는 가장 우아하고 파이썬적인 방법은 무엇입니까?문자열에서 숫자를 찾는 우아한 방법은 무엇입니까?
그러나 숫자의 "컨텍스트"도 필요합니다. 그때 나는 다시 그것을 변경하려는 원본 (예 : font: bold 13 Arial
->font: bold 14 Arial
)
이 문자열로 당신에게 수를 얻을 것이다 당신이 첫 번째 요소 및 캐스트에를 뽑을 수 거기에서
>>> import re
>>> num_regex = re.compile(r'\d+')
>>> num_regex.findall("font: bold 13 Arial")
['13']
int.
>>> num_regex = re.compile(r'\d+')
>>> num_regex.sub('14', "font: bold 13 Arial")
'font: bold 14 Arial'
:
마찬가지로, 당신은 지금 당신이 수의 내용을 대체 할 말을하기 때문에 대신 findall
>>> num_regex = re.compile(r'(\d+)')
>>> matcher = num_regex.search("font: bold 13 Arial")
>>> matcher.groups()
('13',)
>>> matcher.group(1)
'13'
의 search
을 사용할 수 있습니다, 당신은 sub
방법을 사용하여 그것을 할 수 마지막으로, 현재 값을 1 씩 증가 시키려면 과 같이 코드를 읽을 수없는 코드가있는과 같이 수행해야합니다.
import re
source = "font: bold 13 Arial"
print re.sub(r'\d+', str(int(re.findall(r'\d+', source)[0])+1), source)
출력 :
font: bold 14 Arial
이 더 사용할 수있는 방법을하지만, 참고는, 오류 처리 및 입력 위생이 없습니다. 이 양식에서는주의해서 사용하십시오. : P
num_rex = re.compile(r'\d+')
def increment_str_number(source):
return num_rex.sub(str(int(num_rex.findall(source)[0])+1), source)
그리고 마지막으로, (한도 작동하지만) 소스에 하나 이상의가 가정, 숫자를 모두 교체 :
import re
num_rex = re.compile(r'\d+')
def increment_str_number(source):
nums = set(num_rex.findall(source))
for num in nums:
num = int(num)
source = re.sub("%s" % (num), "%s" % (num + 1), source)
return source
INPUT
글꼴을 굵게 13 굴림 15
OUTPUT
폰트 : 굵은 14 굴림 16
정규 표현식 –
정규 표현식 "\ d +" –
@ David Robinson을 사용하려고하면 답변으로 게시하여 받아 들일 수 있습니다. – Martin