Regex를 사용하여 문자열에서 이중 값 추출
문제: 다음을 사용하여 문자열에서 이중 값을 어떻게 분리할 수 있습니까? 정규 표현식인가요?
다음 코드 조각을 고려하세요.
<code class="python">import re pattr = re.compile(???) x = pattr.match("4.5")</code>
해결책:
정규 표현식을 사용하여 문자열에서 double 값을 추출하려면 표현식의 경우 다음 정규 표현식을 사용할 수 있습니다.
(?x) ^ [+-]?\ * # Optional sign and space ( # Integers or f.p. mantissas: \d+ # Integers of the form a... ( \.\d* # Mantissa of the form a.b or a. )? # ? takes care of integers of the form a |\.\d+ # Mantissa of the form .b ) ([eE][+-]?\d+)? # Optionally match an exponent $
이 정규 표현식은 선택적 부호와 공백으로 시작하고 그 뒤에 정수 또는 부동 소수점 가수와 선택적 지수가 오는 문자열과 일치합니다.
예는 다음과 같습니다.
<code class="python">import re re_float = re.compile("""(?x) ^ [+-]?\ * # Optional sign and space ( # Integers or f.p. mantissas: \d+ # Integers of the form a... ( \.\d* # Mantissa of the form a.b or a. )? # ? takes care of integers of the form a |\.\d+ # Mantissa of the form .b ) ([eE][+-]?\d+)? # Optionally match an exponent $""") m = re_float.match("4.5") print(m.group(0)) # -> 4.5</code>
문자열에서 여러 숫자 추출:
더 큰 문자열에서 여러 숫자를 추출해야 하는 경우 다음을 수행할 수 있습니다. findall() 함수를 사용하세요.
<code class="python">s = """4.5 abc -4.5 abc - 4.5 abc + .1e10 abc . abc 1.01e-2 abc 1.01e-.2 abc 123 abc .123""" print(re.findall(r"[+-]? *(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?", s)) # -> ['4.5', '-4.5', '- 4.5', '+ .1e10', ' 1.01e-2', # ' 1.01', '-.2', ' 123', ' .123']</code>
이 정규식은 선택적 부호, 공백, 정수와 선택적 분수 부분의 조합, 선택적 지수 표기법으로 구성된 모든 숫자와 일치합니다.
위 내용은 정규식을 사용하여 문자열에서 이중 값을 추출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!