Python正则表达式获取不匹配的内容

时间:2019-06-09 00:05:08

标签: python regex compilation matching

我需要解析一行文本并将其分成几部分,然后将其添加到列表中,这是我借助re.parse('regexp')能够做到的。问题是我得到了一些我不希望与此匹配的文本,但是我需要知道它在哪里,如何检测它,当然还有它是什么,以显示错误。

代码完全匹配并过滤掉了,我需要过滤掉与正则表达式不匹配的12和32

import re 

str = '12 32 455c 2v 12tv v 0.5b -3b -b+b-3li b-0.5b 3 c -3 ltr'
a=re.compile(r'[+-]?[0-9]*\.[0-9]+\s*[a-z]+|[+-]?[0-9]*\s*[a-z]+')

r=a.findall(str)
print (r)

初始字符串:

str= '12 32 455c 2v 12tv v 0.5b -3b -b+b-3li b-0.5b 1 3 c -3 ltr'
list parsed, correctly
['455c', '2v', '12tv', ' v', '0.5b', '-3b', '-b', '+b', '-3li', ' b', '-0.5b', '3 c', '-3 ltr']
list that i need as well and any other string not matched ie: (/%&$%)
[12, 32, 1]

2 个答案:

答案 0 :(得分:0)

我的猜测是,如果我们不想只收集数字,那么我们将从一个简单的表达式开始:

\b([\d]{1,}\s)\b|([\w+-.]+)

有两个部分:

\b([\d]{1,}\s)\b

是我们不需要的数字,并且

([\w+-.]+)

有我们想要的输出。

测试

# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility

import re

regex = r"\b([\d]{1,}\s)\b|([\w+-.]+)"

test_str = "12 32 455c 2v 12tv v 0.5b -3b -b+b-3li b-0.5b 3 c -3 ltr"

matches = re.finditer(regex, test_str, re.MULTILINE)

for matchNum, match in enumerate(matches, start=1):

    print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))

    for groupNum in range(0, len(match.groups())):
        groupNum = groupNum + 1

        print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.

Demo

RegEx

如果不需要此表达式,并且希望对其进行修改,请访问regex101.com上的此链接。

RegEx电路

jex.im可视化正则表达式:

enter image description here

答案 1 :(得分:0)

我自己解决了此问题,方法是替换正确解析的初始字符串,因此我得到了区别,然后拆分以将其作为列表获取

str = '12 32 455c 2v 12tv v 0.5b -3b -b+b-3li b-0.5b 1 3 c -3 ltr'
a=re.compile(r'[+-]?[0-9]*\.[0-9]+\s*[a-z]+|[+-]?[0-9]*\s*[a-z]+')
r=a.findall(str)
print (r)
errors = str
for t in r:
    errors = errors.replace(t, '', 1)
errors = errors.split()
print(errors)