繁体   English   中英

关于 Python 中正则表达式的问题

[英]Questions About Regular Expressions in Python

我正在学习正则表达式,但我在理解某些事情时遇到了麻烦。 我正在处理一项使用正则表达式查找字符串中的各种字符和单词的作业:

使用 findall 函数,获取分配给 'lorem_ipsum' 的字符串中所有非字母数字字符的实例

输出到控制台的非字母数字字符数。 提示:使用 len 函数。 将 ^ 和 [] 正则表达式运算符与 findall() 正则表达式函数一起使用。

pattern = re.compile(r'sit-:amet')
occurrance_sit_amet = pattern.findall(lorem_ipsum)
for match in occurrance_sit_amet:
  print (match)

为什么要使用 len 函数? 更令人费解的是,为什么我要使用^和[],因为它们只能用于查找字符串开头的字符和括号中的字符? 我的代码也给了我这个错误:

无法读取未定义的属性“toISOString” - 9b2bb9d0-119a-11e8-95f3-4351563e5e1b

有人可以解释一下这是什么意思吗?

我认为您误解了提示是什么(尽管我承认它们具有误导性)。 当它说“使用^[] ”时,它并不是告诉您使用字符类 ( [] ) 和字符串锚点的开头 ( ^ )。 它告诉您将字符[]^组合在一起以形成反向字符类[^] 反向字符类中的所有内容都不会匹配。

你需要的正则表达式是这样的:

[^a-zA-Z0-9]

它的意思是“除了az、AZ 或 0-9 之外的所有东西”

关于len函数,您的任务是找出有多少非字母数字字符,不是吗? findall返回匹配列表。 这就是为什么你需要找到列表的长度来找出有多少这样的字符。

这是一些代码:

pattern = re.compile(r'[^a-zA-Z0-9]')
allMatches = pattern.findall(lorem_ipsum)
print(len(allMatches))

回答您的问题:

  1. 使用findall返回matches ,它是与您的模式匹配的所有子字符串的列表。 所以len(matches)应该给你“非字母数字字符的数量”。
  2. ^可以与[]结合使用来搜索不包含某些字符的模式

可能导致该错误的正则表达式的一些问题:

  • 连字符。 连字符在两个字符之间表示一个范围,所以现在正则表达式试图找到从t:字符,这没有任何意义。
  • 正则表达式中的字母字符。 除了冒号,现在r'sit-:amet'匹配一个由特定小写字母组成的字符串一个接一个。 即使正则表达式有效,这也不符合您想要的“非字母数字”模式。

您需要的是对任何字母数字进行否定搜索:

[^A-Za-z0-9]

PS我强烈建议使用regexr只要你有正则表达式assingments。 这是检查模式匹配语法如何工作并测试您的正则表达式的好方法:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM