Python регулярное выражение получить несоответствующий контент - PullRequest
0 голосов
/ 09 июня 2019

Мне нужно разобрать строку текста и разделить на части и добавить ее в список, что я смог сделать с помощью 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 голосов
/ 09 июня 2019

Я решил это самостоятельно, заменив правильно разобранную исходную строку, поэтому я получаю разницу и делю ее, чтобы получить ее в виде списка

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)
0 голосов
/ 09 июня 2019

Я предполагаю, что если мы не захотим собирать только цифры, то начнем с простого выражения:

\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.

Демо

RegEx

Если это выражение не нужно и вы хотите изменить его, перейдите по этой ссылке на regex101.com .

RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

...