python - 奇怪的输出正则表达式 r'[-.\:alnum:](.*)'
问题描述
我希望在“-”之后获取所有字母数字字符例如:
>>> str1 = "12 - mystr"
>>> re.findall(r'[-.\:alnum:](.*)', str1)
[' mystr']
首先,奇怪的是空格被认为是字母数字,而我希望得到 ['mystr']。
其次,如果没有“-”,我无法理解为什么可以获取它:
>>> str2 = "qwertyuio"
>>> re.findall(r'[-.\:alnum:](.*)', str2)
['io']
解决方案
首先,Pythonre
不支持POSIX 字符类。
空格不被视为字母数字,您的第一个模式匹配-
然后[-.\:alnum:]
将(.*)
除换行符之外的所有 0 个或更多字符捕获到第 1 组中。该[-.\:alnum:]
模式匹配一个字符,即-
, .
, :
, a
, l
, n
,u
或m
. 因此,当针对 , 运行时qwertyuio
,u
匹配并被io
捕获到第 1 组。
字母数字字符可以与[^\W_]
模式匹配。因此,要捕获所有字母数字字符-
,然后是 0+ 空格,您可以使用
re.findall(r'-\s*([^\W_]+)', s)
查看正则表达式演示
细节
-
- 一个连字符\s*
- 0+ 个空格([^\W_]+)
- 捕获组 1:一个或多个 (+
) 字符,它们是字母或数字。
print(re.findall(r'-\s*([^\W_]+)', '12 - mystr')) # => ['mystr']
print(re.findall(r'-\s*([^\W_]+)', 'qwertyuio')) # => []
推荐阅读
- css - 布尔玛:链接的悬停颜色与颜色有关吗?
- python - 具有矩阵单独行乘法的每个向量元素的 Numpy 运算符
- java - 如何修复java中的空指针异常错误
- python - django 休息问题:get_extra_actions 与 listApiView
- django - 重新启动 Django 应用程序,使用 FastCGI 部署在 IIS 上
- c++ - 如何找到数组中元素的总和
- c - 在循环中定义一个 var
- python - 如何在 x 轴上绘制具有 2 个变量并在 y 轴上计数的图形?
- node.js - 如何在同一页面上显示 flash 消息而不渲染或擦除 express js 教科书中的值
- python - 如何用 int 修改 LpVariable?