Python中

时间:2017-01-05 11:58:55

标签: python regex python-2.7 whitespace

我想使用 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

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

我很确定这会起作用,documentation说我可以使用/ S匹配[]中的空格,所以我不确定问题出在哪里。

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

4 个答案:

答案 0 :(得分:7)

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

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

m = re.match(r'\S+',line)

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

m = re.match(r'\S*',line)

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

m = re.search(r'^\S+',line)

请参阅Python demo

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

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

res = line.split() 
print(res[0])

请参阅another Python demo

答案 1 :(得分:2)

\S匹配空格字符。

[...]匹配非空白字符。

...匹配集[^...]中的字符。

...匹配不在集[^\S]中的字符。

{{1}}匹配不是非空白字符的字符,即它与空白字符匹配。

答案 2 :(得分:0)

按如下所示替换您的搜索,\ S查找非空格字符,并+搜索一次或多次。 Python开始从第一个字符开始搜索。

import re
line = "STARC-1.1.1.5             ConsCase    WARNING    Warning"
m = re.search('\S+',line)
print(m.group(0))

答案 3 :(得分:0)

import re
line = "STARC-1.1.1.5             ConsCase    WARNING    Warning"
m = re.search('S.+[0-9]',line)
print(m.group(0))

re.search返回匹配项,因此请使用字母和数字并按照代码中的说明打印匹配项。如果仅打印变量,则将其打印为匹配项1。 希望这能回答您的问题

m = re.search('[A-Z].+[0-9]',line)

将研究范围更改为大写字母会发现从CAPS A到Z, 反之,如果将其更改为小写字母,则为

m = re.search('[a-z].+[0-9]',line)

它只会找到小写字母,有时您也应该突出显示这些符号,以便从中搜索或搜索直至该符号之前的字符。