繁体   English   中英

Python中匹配非空白的正则表达式

[英]Regular expression for matching non-whitespace in Python

我想使用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 以这种方式提取该字段。

[^\\S]是一个 否定字符类,它等于\\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 演示

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])

请参阅另一个 Python 演示

\\s匹配空白字符。

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

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

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

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

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

import re
line = "STARC-1.1.1.5             ConsCase    WARNING    Warning"
m = re.search('\S+',line)
print(m.group(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)

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

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

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

暂无
暂无

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

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