如何使用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()生成的正则表达式对象的方法。
正确的写法有两种:
- 直接调用
re.findall(),第一个参数是匹配模式,第二个参数是目标字符串:
import re lorem_ipsum = "你的字符串内容" # 根据需求选下面其中一个模式 results = re.findall(r'\W', lorem_ipsum) # 包含下划线的非字母数字 # 或者 results = re.findall(r'[^a-zA-Z0-9]', lorem_ipsum) # 不包含下划线的非字母数字
- 先编译正则表达式模式,再调用
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
相关产品推荐
相关产品推荐

