日期的正则表达

1、超强正则,这个日期正则表达式支持
     YYYY-MM-DD 
     YYYY/MM/DD 
     YYYY_MM_DD 
     YYYY.MM.DD的形式
     ((^((1[8-9]\\d{2})|([2-9]\\d{3}))([-\\/\\._])(10|12|0?[13578])([-\\/\\._])(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\\d{2})|([2-9]\\d{3}))([-\\/\\._])(11|0?[469])([-\\/\\._])(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\\d{2})|([2-9]\\d{3}))([-\\/\\._])(0?2)([-\\/\\._])(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([3579][26]00)([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([1][89][0][48])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([2-9][0-9][0][48])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([1][89][2468][048])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([2-9][0-9][2468][048])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([1][89][13579][26])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([2-9][0-9][13579][26])([-\\/\\._])(0?2)([-\\/\\._])(29)$))

 

 2、支持 YYYY-MM_DD格式

(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)

 

原文:https://blog.youkuaiyun.com/l1028386804/article/details/48916057 
       

 

### 使用 re 模块进行正则表达式匹配和替换 Python 3 中的 `re` 模块是处理正则表达式的主要工具,可以用于字符串的匹配、查找、替换和分割等操作。以下是使用正则表达式进行匹配和替换的指南及示例。 #### 1. 常用函数概览 - **`re.search(pattern, string)`**:扫描字符串,查找与正则表达式匹配的第一个位置,返回 `re.Match` 对象,若无匹配则返回 `None`。 - **`re.match(pattern, string)`**:尝试从字符串的起始位置匹配正则表达式,若起始位置不匹配则返回 `None`。 - **`re.findall(pattern, string)`**:返回字符串中所有与正则表达式匹配的结果,以列表形式呈现。 - **`re.sub(pattern, repl, string)`**:将字符串中所有与正则表达式匹配的部分替换为指定字符串,并返回新字符串。 #### 2. 匹配示例 使用 `re.search` 和 `re.match` 进行匹配操作: ```python import re # 查找任意数字 text = "The price is 123 dollars." match = re.search(r'\d+', text) if match: print("Found number:", match.group()) # 输出: Found number: 123 ``` `match.group()` 用于获取匹配到的字符串内容。如果需要提取多个部分,可以使用分组功能: ```python # 提取日期格式 date_text = "Date: 2024-05-20" date_match = re.match(r'(\d{4})-(\d{2})-(\d{2})', date_text) if date_match: print("Year:", date_match.group(1)) # 输出: Year: 2024 print("Month:", date_match.group(2)) # 输出: Month: 05 print("Day:", date_match.group(3)) # 输出: Day: 20 ``` #### 3. 替换示例 使用 `re.sub` 可以替换匹配到的文本: ```python # 替换所有数字为 X new_text = re.sub(r'\d+', 'X', "Order ID: 987654") print(new_text) # 输出: Order ID: X ``` 还可以使用函数进行动态替换: ```python # 将每个数字加 1 def replace_func(match): return str(int(match.group()) + 1) updated_text = re.sub(r'\d+', replace_func, "Scores: 89, 92") print(updated_text) # 输出: Scores: 90, 93 ``` #### 4. 正则表达式语法要点 - **`.`**:匹配任意单个字符(除换行符外)。 - **`\d`**:匹配任何数字(等价于 `[0-9]`)。 - **`\w`**:匹配字母、数字或下划线(等价于 `[a-zA-Z0-9_]`)。 - **`\s`**:匹配空白字符(如空格、换行、制表符等)。 - **`*`**:匹配前一个字符 0 次或多次。 - **`+`**:匹配前一个字符至少 1 次。 - **`?`**:匹配前一个字符 0 次或 1 次。 - **`{n,m}`**:匹配前一个字符至少 n 次,最多 m 次。 #### 5. 性能优化建议 - **预编译正则表达式**:对于重复使用的正则表达式,应使用 `re.compile` 预编译,以提高性能。 ```python pattern = re.compile(r'\d+') result = pattern.findall("Items: 12, 24, 36") print(result) # 输出: ['12', '24', '36'] ``` - **避免贪婪匹配**:默认情况下,正则表达式是贪婪的(尽可能多地匹配)。可以通过添加 `?` 实现非贪婪匹配。 ```python # 贪婪匹配 greedy = re.search(r'<.*>', 'Hello') print(greedy.group()) # 输出: Hello # 非贪婪匹配 non_greedy = re.search(r'<.*?>', 'Hello') print(non_greedy.group()) # 输出: <em> ``` #### 6. 常见问题与解决方案 - **匹配失败**:检查正则表达式是否正确,确保使用原始字符串(`r'pattern'`),并考虑大小写、特殊字符是否需要转义。 - **贪婪匹配问题**:使用非贪婪模式(如 `.*?`)来控制匹配范围。 - **特殊字符转义**:在正则表达式中,如需匹配 `.`、`*`、`?` 等特殊字符,需要用反斜杠 `\` 转义,例如 `r'\.'` 匹配字面量的点号。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值