用于在Python中匹配非空格的正则表达式

Oli*_*ren 2 python regex whitespace python-2.7

我想使用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)
Run Code Online (Sandbox Code Playgroud)

它似乎是打印空白而不是STARC-1.1.1.5

据我了解,这个正则表达式是这样的: 在行的开头,找到一组非空白字符,不要贪心

我很确定这会工作,文档说我可以使用/ S来匹配[]中的空格,所以我不确定问题出在哪里.

现在,我知道,我知道这可能看起来很奇怪,为什么我不使用其他功能来做到这一点?好吧,有不止一种方法可以给猫皮肤,我仍然在Python中使用正则表达式,因此我想知道如何使用re.search以这种方式提取这个字段.

Wik*_*żew 8

[^\S]是一个等于(空白模式)的否定字符类\s.这*?是一个惰性量词,匹配零个或多个字符,但尽可能少,并且在模式结尾处使用时,实际上不会匹配任何字符.

替换你的m = re.search('^[^\S]*?',line)

m = re.match(r'\S+',line)
Run Code Online (Sandbox Code Playgroud)

或 - 如果您还想允许空字符串匹配:

m = re.match(r'\S*',line)
Run Code Online (Sandbox Code Playgroud)

re.match方法将模式锚定在字符串的开头.使用re.search,您需要将^锚保持在模式的开头:

m = re.search(r'^\S+',line)
Run Code Online (Sandbox Code Playgroud)

查看Python演示:

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
Run Code Online (Sandbox Code Playgroud)

但是,在这种情况下,您可以仅使用以下内容split():

res = line.split() 
print(res[0])
Run Code Online (Sandbox Code Playgroud)

另一个Python演示.


mel*_*ene 5

\s 匹配一个空白字符。

\S 匹配一个非空白字符。

[...]匹配集合中的一个字符...

[^...]匹配不在集合中的字符...

[^\S] 匹配一个不是非空白字符的字符,即它匹配一个空白字符。