You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用findall函数查找非字母数字字符及变量赋值问题

嘿,我来帮你把这两个问题讲清楚:

问题1:如何使用findall函数查找所有非字母数字字符?

首先要明确,findall()是Python的re(正则表达式)模块里的函数,不是字符串自带的方法哦。要查找非字母数字字符,我们需要用对应的正则表达式匹配模式:

  • 如果你的“非字母数字”包括下划线_,可以用\W这个元字符(它等价于匹配除字母、数字、下划线之外的所有字符)
  • 如果要排除下划线,只匹配纯非字母数字的字符(比如标点、空格、特殊符号),就用[^a-zA-Z0-9](方括号里的^表示“取反”,意思是匹配不在这个范围内的字符)

举个简单的使用例子:

import re

sample_text = "Hello! This is 123_test."
# 匹配包括下划线的非字母数字字符
non_alnum_with_underscore = re.findall(r'\W', sample_text)
# 匹配不包括下划线的非字母数字字符
non_alnum_no_underscore = re.findall(r'[^a-zA-Z0-9]', sample_text)

print(non_alnum_with_underscore)  # 输出:['!', ' ', ' ', ' ', '.']
print(non_alnum_no_underscore)    # 输出:['!', ' ', ' ', ' ', '_', '.']
问题2:代码results = lorem_ipsum.findall()是否正确?括号内应填什么?

这个写法不正确,因为字符串对象并没有findall()方法,findall()是re模块的函数,或者是re.compile()生成的正则表达式对象的方法。

正确的写法有两种:

  1. 直接调用re.findall(),第一个参数是匹配模式,第二个参数是目标字符串:
import re

lorem_ipsum = "你的字符串内容"
# 根据需求选下面其中一个模式
results = re.findall(r'\W', lorem_ipsum)  # 包含下划线的非字母数字
# 或者
results = re.findall(r'[^a-zA-Z0-9]', lorem_ipsum)  # 不包含下划线的非字母数字
  1. 先编译正则表达式模式,再调用findall():
import re

pattern = re.compile(r'\W')  # 或者 r'[^a-zA-Z0-9]'
lorem_ipsum = "你的字符串内容"
results = pattern.findall(lorem_ipsum)

所以括号里需要填的是匹配非字母数字字符的正则表达式模式,具体选r'\W'还是r'[^a-zA-Z0-9]'取决于你是否要把下划线算作非字母数字字符。

内容的提问来源于stack exchange,提问作者jkreish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:01:27