re_util.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. # -*- coding: utf-8 -*-
  2. import re
  3. def search_string(pattern: str, text: str) -> re.Match[str] | None:
  4. """
  5. 全字段正则匹配
  6. 参数:
  7. - pattern (str): 正则表达式模式。
  8. - text (str): 待匹配的文本。
  9. 返回:
  10. - re.Match[str] | None: 匹配结果。
  11. """
  12. if not pattern or not text:
  13. return None
  14. result = re.search(pattern, text)
  15. return result
  16. def match_string(pattern: str, text: str) -> re.Match[str] | None:
  17. """
  18. 从字段开头正则匹配
  19. 参数:
  20. - pattern (str): 正则表达式模式。
  21. - text (str): 待匹配的文本。
  22. 返回:
  23. - re.Match[str] | None: 匹配结果。
  24. """
  25. if not pattern or not text:
  26. return None
  27. result = re.match(pattern, text)
  28. return result
  29. def is_phone(number: str) -> re.Match[str] | None:
  30. """
  31. 检查手机号码格式
  32. 参数:
  33. - number (str): 待检查的手机号码。
  34. 返回:
  35. - re.Match[str] | None: 匹配结果。
  36. """
  37. if not number:
  38. return None
  39. phone_pattern = r'^1[3-9]\d{9}$'
  40. return match_string(phone_pattern, number)
  41. def is_git_url(url: str) -> re.Match[str] | None:
  42. """
  43. 检查 git URL 格式
  44. 参数:
  45. - url (str): 待检查的 URL。
  46. 返回:
  47. - re.Match[str] | None: 匹配结果。
  48. """
  49. if not url:
  50. return None
  51. git_pattern = r'^(?!(git\+ssh|ssh)://|git@)(?P<scheme>git|https?|file)://(?P<host>[^/]*)(?P<path>(?:/[^/]*)*/)(?P<repo>[^/]+?)(?:\.git)?$'
  52. return match_string(git_pattern, url)