我想使用 re.search 提取第一组非空白字符。我有以下重现我的问题的伪脚本:
#!/usr/bin/env python2.7
import re
line = "STARC-1.1.1.5 ConsCase WARNING Warning"
m = re.search('^[^\S]*?',line)
if m:
print m.group(0)
它似乎在打印空格而不是 STARC-1.1.1.5
据我了解,这个正则表达式在说: 在行的开头,找到一组非空白字符,不要贪心
我很确定这会起作用, 文档 说我可以使用 /S 来匹配 [] 中的空格,所以我不确定问题出在哪里。
现在,我知道,我知道这可能看起来很奇怪,为什么我不使用其他功能来做到这一点?好吧,剥猫皮的方法不止一种,我仍然掌握 Python 中正则表达式的窍门,所以我想知道如何使用 re.search 以这种方式提取该字段。
原文由 Oliver Farren 发布,翻译遵循 CC BY-SA 4.0 许可协议
[^\S]
是一个 否定字符类,等于\s
(空白模式)。*?
是一个惰性量词,匹配 _零个或多个字符,但尽可能少_,并且在模式末尾使用时实际上不会匹配任何字符。替换你
m = re.search('^[^\S]*?',line)
符合或者 - 如果您还想允许空字符串匹配:
re.match
方法将模式锚定在字符串的开头。对于re.search
,您需要在模式的开头保留^
锚点:请参阅 Python 演示:
但是,在这种情况下,您可能只使用
split()
:请参阅 另一个 Python 演示。