正常正则表达式(不允许为空…

本文汇总了多种实用的正则表达式,涵盖整数、浮点数、字符串、电子邮件地址等常见验证需求,并提供了示例说明如何使用这些表达式进行数据验证。
[size = 12px] 1 ^ d + $   // 匹配非负整数(正整数 + 0)
2 ^ [ 0 - 9 ] * [ 1 - 9 ][ 0 - 9 ] * $   // 匹配正整数
3 ^ (( - d + ) | ( 0 + ))$   // 匹配非正整数(负整数 + 0)
4 ^- [ 0 - 9 ] * [ 1 - 9 ][ 0 - 9 ] * $   // 匹配负整数
5 ^-? d + $     // 匹配整数
6 ^ d + (.d + ) ? $   // 匹配非负浮点数(正浮点数 + 0)
7 ^ (([ 0 - 9 ] + .[ 0 - 9 ] * [ 1 - 9 ][ 0 - 9 ] * ) | ([ 0 - 9 ] * [ 1 - 9 ][ 0 - 9 ] * .[ 0 - 9 ] + ) | ([ 0 - 9 ] * [ 1 - 9 ][ 0 - 9 ] * ))$   // 匹配正浮点数
8 ^ (( - d + (.d + ) ? ) | ( 0 + (. 0 + ) ? ))$   // 匹配非正浮点数(负浮点数 + 0)
9 ^ ( - (([ 0 - 9 ] + .[ 0 - 9 ] * [ 1 - 9 ][ 0 - 9 ] * ) | ([ 0 - 9 ] * [ 1 - 9 ][ 0 - 9 ] * .[ 0 - 9 ] + ) | ([ 0 - 9 ] * [ 1 - 9 ][ 0 - 9 ] * )))$   // 匹配负浮点数
10 ^ ( -? d + )(.d + ) ? $   // 匹配浮点数
11 ^ [A - Za - z] + $   // 匹配由26个英文字母组成的字符串
12 ^ [A - Z] + $   // 匹配由26个英文字母的大写组成的字符串
13 ^ [a - z] + $   // 匹配由26个英文字母的小写组成的字符串
14 ^ [A - Za - z0 - 9 ] + $   // 匹配由数字和26个英文字母组成的字符串
15 ^ w + $   // 匹配由数字、26个英文字母或者下划线组成的字符串
16 ^ [w - ] + (.[w - ] + ) * @[w - ] + (.[w - ] + ) + $     // 匹配email地址
17 ^ [a - zA - z] + : // 匹配(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$   // 匹配 url 
18 。匹配中文字符的正则表达式: [u4e00 - u9fa5]
19 。匹配双字节字符(包括汉字在内):[ ^ x00 - xff]
20 。应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
String.prototype.len
= function(){ return this .replace([ ^ x00 - xff] / g, " aa " ).length;}
21 。匹配空行的正则表达式:n[s | ] * r
22 。匹配HTML标记的正则表达式: /< (. * ) > . *< / 1 >|< (. * ) />/
23 。匹配首尾空格的正则表达式:( ^ s * ) | (s * $)

* 正则表达式用例
 
* 1 ^ S + [a - z A - Z]$ 不能为空 不能有空格  只能是英文字母
 
* 2 、S{ 6 ,}         不能为空 六位以上
 
* 3 ^ d + $          不能有空格 不能非数字
 
* 4 、(. * )(.jpg | .bmp)$ 只能是jpg和bmp格式
 
* 5 ^ d{ 4 } - d{ 1 , 2 } - d{ 1 , 2 }$ 只能是2004 - 10 - 22格式
 
* 6 ^ 0 $            至少选一项
 
* 7 ^ 0 { 2 ,}$        至少选两项
 
* 8 ^ [s | S]{ 20 ,}$ 不能为空 二十字以上
 
* 9 ^ +? [a - z0 - 9 ](([ -+ .] | [_] + ) ? [a - z0 - 9 ] + ) * @([a - z0 - 9 ] + (. | - )) + [a - z]{ 2 , 6 }$邮件
 
* 10 、w + ([ -+ .]w + ) * @w + ([ - .]w + ) * .w + ([ - .]w + ) * ([,;]s * w + ([ -+ .]w + ) * @w + ([ - .]w + ) * .w + ([ - .]w + ) * ) * 输入多个地址用逗号或空格分隔邮件
 
* 11 ^ (([ 0 - 9 ] + )) ? [ 0 - 9 ]{ 7 , 8 }$电话号码7位或8位或前面有区号例如( 022 87341628
 
* 12 ^ [a - z A - Z 0 - 9 _] + @[a - z A - Z 0 - 9 _] + (.[a - z A - Z 0 - 9 _] + ) + (,[a - z A - Z 0 - 9 _] + @[a - z A - Z 0 - 9 _] + (.[a - z A - Z 0 - 9 _] + ) + ) * $
 
*      只能是字母、数字、下划线;必须有@和.同时格式要规范 邮件
 
* 13 ^ w + @w + (.w + ) + (,w + @w + (.w + ) + ) * $上面表达式也可以写成这样子,更精练。
   
14    ^ w + (( - w + ) | (.w + )) * @w + ((. |- )w + ) * .w + $ [ / size]

转载于:https://www.cnblogs.com/stevin-john/p/4768993.html

<think>我们正在处理用户关于Python正则表达式匹配成功但返回的问题。根据用户提供的引用和问题描述,我们需要分析可能的原因并提供解决方案。根据引用内容:-引用[2]提到使用`re.match`和`re.search`方法,并展示了通过`group()`获取匹配结果。-引用[3]展示了使用`re.match`匹配单个字符和字符串的例子。-引用[4]提到了使用`re.VERBOSE`模式编写复杂的正则表达式,但同时也可能引入格和注释,影响匹配。-引用[5]列出了正则表达式中的特殊字符集,如`\w`、`\s`等。用户的问题:正则表达式匹配成功但返回结果。可能的原因包括:1.匹配方法选择当:`re.match`只从字符串开头匹配,如果匹配在开头则失败;而`re.search`在整个字符串中搜索。2.没有使用`group()`方法提取匹配结果。匹配成功后,需要通过`group()`或`groups()`来获取匹配的字符串。3.分组问题:正则表达式中有分组,但用户可能错误地引用了分组,或者没有指定分组索引。4.正则表达式中有捕获分组或匹配。5.使用了`re.VERBOSE`模式,但忽略了其中的格和注释,导致实际匹配的字符串与预期同。解决方案:1.确认匹配方法:如果匹配在字符串开头,应使用`re.search`或`re.findall`。2.正确使用`group()`:匹配成功后,通过`group(0)`获取整个匹配字符串,或通过`group(n)`获取第n个分组。3.检查分组:如果正则表达式中有分组,确保使用正确的分组索引。如果需要分组,可以使用捕获分组`(?:...)`。4.检查正则表达式是否包含匹配的可能性(例如,量词`*`允许0次匹配)。5.如果使用了`re.VERBOSE`,注意其中的格和注释会被忽略,但正则表达式本身可能因此改变,确保实际编译的正则表达式与预期一致。我们将结合引用内容,逐步解释并提供代码示例。</think>### Python正则表达式匹配成功但返回的原因与解决方案 在使用Python正则表达式时,匹配成功却返回结果通常由以下原因造成: #### 1. **未正确提取匹配结果**(最常见原因) - 正则表达式匹配成功后,**必须使用`group()`方法提取结果**,否则返回的是匹配对象而字符串 - 错误示例: ```python import re match = re.search(r'\d+', 'abc123def') print(match) # 输出 <re.Match object; span=(3,6), match='123'> ``` - 正确做法: ```python match = re.search(r'\d+', 'abc123def') print(match.group()) # 输出 '123' ``` #### 2. **分组捕获问题** - 当正则包含捕获组`(...)`时,`group(0)`返回完整匹配,`group(1)`及以上返回子组 - 示例: ```python match = re.search(r'(\w+):(\d+)', 'name:age=30') print(match.groups()) # 输出 ('name', 'age') print(match.group(0)) # 输出 'name:age' print(match.group(1)) # 输出 'name' ``` #### 3. **匹配位置问题** - `re.match()`**只匹配字符串开头**,若匹配在开头会返回`None` - 解决方案: ```python # 错误:匹配在开头 re.match(r'\d+', 'abc123') # 返回 None # 正确:改用search() re.search(r'\d+', 'abc123') # 匹配成功 # 或添加.*允许前缀 re.match(r'.*(\d+)', 'abc123').group(1) # 返回 '123' ``` #### 4. **零长度匹配** - 某些正则(如`\b`、`^`、`$`)匹配的是**位置而字符** - 示例: ```python # 匹配单词边界位置(零长度) match = re.search(r'\b', 'hello') print(match.group()) # 返回字符串 '' ``` #### 5. **贪婪匹配陷阱** - 贪婪量词`*`/`+`可能匹配过多内容,导致预期子组为 - 解决方案:使用贪婪模式`*?`/`+?` ```python # 贪婪匹配问题 re.search(r'<div>(.*)</div>', '<div>a</div>b</div>').group(1) # 返回 'a</div>b' # 贪婪修正 re.search(r'<div>(.*?)</div>', '<div>a</div>b</div>').group(1) # 返回 'a' ``` #### 6. **VERBOSE模式影响** [^4] - 当使用`re.VERBOSE`编写多行正则时,**注释和格会被忽略**,可能导致实际匹配模式与预期符 - 建议:先在VERBOSE模式下测试 #### 完整解决方案流程 ```python import re text = "示例文本2023" pattern = r'\d{4}' # 匹配4位数字 # 1. 检查匹配对象是否存在 match = re.search(pattern, text) if not match: print("未找到匹配") exit() # 2. 提取完整匹配结果 print("完整匹配:", match.group(0)) # 输出 2023 # 3. 提取子组(如有) if match.groups(): for i, group in enumerate(match.groups(), 1): print(f"子组{i}: {group}") ``` ### 关键点总结 1. 始终使用`.group()`提取结果 2. 优先选择`re.search()`而`re.match()` 3. 检查正则分组结构 4. 注意贪婪匹配行为 5. 零长度匹配返回字符串是正常现象 通过以上步骤,可解决99%的"匹配成功但返回"问题[^2][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值