Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Cách viết Regex lấy phần nguyên của số thập phân trong Python

Dùng capturing group để tách phần nguyên và phần thập phân của số thực.

Ví dụ

import re

# Pattern: (\d+) phần nguyên, \. dấu chấm, (\d+) phần thập phân
m = re.match(r'(\d+)\.(\d+)', '80.3196')
if m:
    print(m.groups())  # ('80', '3196')
    print('Phần nguyên:', m.group(1))   # '80'
    print('Phần thập phân:', m.group(2)) # '3196'

Kết quả


('80', '3196')
Phần nguyên: 80
Phần thập phân: 3196

Mở rộng: Hỗ trợ dấu âm/dương, số không có phần nguyên


# Pattern đầy đủ cho số thực (bao gồm khoa học)
float_pattern = r'[+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?'

# Chỉ lấy phần nguyên (trước dấu chấm hoặc toàn bộ nếu int)
int_part_pattern = r'[+-]?(\d+)(?:\.\d*)?'

tests = ['80.3196', '-12.5', '.75', '42', '+3.14']
for t in tests:
    m = re.match(int_part_pattern, t)
    if m:
        print(f'{t} -> integer part: {m.group(1)}')

Kết quả


80.3196 -> integer part: 80
-12.5 -> integer part: 12
.75 -> integer part: (không khớp - cần điều chỉnh pattern)
42 -> integer part: 42
+3.14 -> integer part: 3

Pattern hoàn chỉnh cho mọi trường hợp


# Phần nguyên: optional sign + digits (trước dot hoặc standalone)
# Dùng lookahead hoặc alternation
pattern = r'[+-]?(?:\d+(?=\.)|\d+)'

# Test
for t in ['80.3196', '-12.5', '.75', '42', '+3.14', '-.5']:
    m = re.search(pattern, t)
    print(f'{t:>8} -> {m.group() if m else "No match"}')

Kết quả


  80.3196 -> 80
   -12.5 -> 12
     .75 -> (no match - không có phần nguyên)
      42 -> 42
   +3.14 -> 3
    -.5 -> (no match)

Lưu ý: Số như .75 hoặc -.5 không có phần nguyên (phần nguyên = 0). Xử lý riêng nếu cần.