Используйте регулярные выражения, чтобы найти конкретную строку и между кавычками

Да, у него есть для захвата по значению в точке, потому что иначе вы могли бы попытаться захватить переменную (например, по ссылке), которая больше не существует, когда функция лямбда / функция действительно вызывается.

Стандарт поддерживает захват как по значению И по ссылке, так и для обоих возможных вариантов использования. Если вы скажете компилятору зафиксировать по значению, он будет захвачен в точке создания лямбда. Если вы попросите захватить по ссылке, он будет захватывать ссылку на переменную, которая затем будет использоваться в точке, на которой вызывается лямбда (требуя, конечно, чтобы ссылочная переменная все еще существовала в точке вызов выполнен).

-1
задан ryguy72 17 January 2019 в 17:06
поделиться

5 ответов

В чистом питоне это должно быть примерно так:

xml = '<Report Type="Final Report" SiteName="Get Dataset" Name="Get Metadata" Description="Get Metadata" From="2019-01-16 00:00" Thru="2019-01-16 23:59" obj_device="479999" locations="69,31,"><Objective Type="Availability"><Goal>99.99</Goal><Actual>100.00</Actual><Compliant>Yes</Compliant><Errors>0</Errors><Checks>2880</Checks></Objective><Objective Type="Uptime"><Goal/><Actual/><Compliant/><Errors>0</Errors><Checks>0</Checks></Objective>'
report = xml.split('>')[0]
description = report.split("Description=\"")[1].split("\" From=\"")[0]
from_ = report.split("From=\"")[1].split("\" Thru=\"")[0]
thru = report.split("Thru=\"")[1].split("\" obj_device=\"")[0]
0
ответ дан Ali Hallaji 17 January 2019 в 17:06
поделиться

Ваши три регулярных выражения, которые вам понадобятся для захвата упомянутых значений, будут такими,

Description="([^"]*)"
From="([^"]*)"
Thru="([^"]*)"

, которые вы можете динамически генерировать с помощью функции и повторно использовать ее для поиска значений для любого типа данных. Попробуйте эту демонстрацию кода Python,

import re

def getValue(str, key):
 m = re.search(key + '="([^"]*)"',str)
 if m:
  return m.group(1)

s = '''<Report Type="Final Report" SiteName="Get Dataset" Name="Get Metadata" Description="Get Metadata" From="2019-01-16 00:00" Thru="2019-01-16 23:59" obj_device="479999" locations="69,31,">
  <Objective Type="Availability">
    <Goal>99.99</Goal>
    <Actual>100.00</Actual>
    <Compliant>Yes</Compliant>
    <Errors>0</Errors>
    <Checks>2880</Checks>
    </Objective>
  <Objective Type="Uptime">
    <Goal/>
    <Actual/>
    <Compliant/>
    <Errors>0</Errors>
    <Checks>0</Checks>
  </Objective>'''

print('Description: ' + getValue(s,'Description'))
print('From: ' + getValue(s,'From'))
print('Thru: ' + getValue(s,'Thru'))

Prints,

Description: Get Metadata
From: 2019-01-16 00:00
Thru: 2019-01-16 23:59
0
ответ дан Pushpesh Kumar Rajwanshi 17 January 2019 в 17:06
поделиться

Это регулярное выражение должно дать вам содержание описания, остальные должны быть похожими:

'Description="([\w\s]+)" From'
0
ответ дан Franco Piccolo 17 January 2019 в 17:06
поделиться
  1. Вы можете сделать это с 1 шаблоном регулярных выражений

    pattern = re.compile('Description="(.*)" From="(.*)" Thru="(.*)" obj')
    
    for founds in re.findall(pattern=pattern, string=string):
        desc, frm, thru = founds
        print(desc)
        print(frm)
        print(thru)
    
    # ouput
    # Get Metadata
    # 2019-01-16 00:00
    # 2019-01-16 23:59
    
  2. Или вы можете сделать один и тот же шаг с разными шаблонами

    pattern_desc = re.compile('Description="(.*)" From')
    pattern_frm = re.compile('From="(.*)" Thru')
    pattern_thru = re.compile('Thru="(.*)" obj')
    
    re.findall(pattern_desc, string) 
    # output: ['Get Metadata']
    
    re.findall(pattern_frm, string)
    # output: ['2019-01-16 00:00']
    
    re.findall(pattern_thru, string)
    # output: ['2019-01-16 23:59'] 
    
    [113 ]
0
ответ дан ozcanyarimdunya 17 January 2019 в 17:06
поделиться

Я собрал небольшой рабочий пример с регулярным выражением, чтобы получить данные, которые вы ищете.

import re

long_string = '''
<Report Type="Final Report" SiteName="Get Dataset" Name="Get Metadata" Description="Get Metadata" From="2019-01-16 00:00" Thru="2019-01-16 23:59" obj_device="479999" locations="69,31,">
  <Objective Type="Availability">
    <Goal>99.99</Goal>
    <Actual>100.00</Actual>
    <Compliant>Yes</Compliant>
    <Errors>0</Errors>
    <Checks>2880</Checks>
    </Objective>
  <Objective Type="Uptime">
    <Goal/>
    <Actual/>
    <Compliant/>
    <Errors>0</Errors>
    <Checks>0</Checks>
  </Objective>
'''

match = re.search('Description=\"(.+?)\" From=\"(.+?)\" Thru=\"(.+?)\"', long_string)

if match:
    print(match.group(1))
    print(match.group(2))
    print(match.group(3))

Это дает такой вывод:

Get Metadata
2019-01-16 00:00
2019-01-16 23:59

Надеюсь, что это помогает.

0
ответ дан Mark 17 January 2019 в 17:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: