Как извлечь числовое значение из строки текста с помощью регулярного выражения?

#python #re #regular-language #nsregularexpression

Вопрос:

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

 salespackquantity=1amp;itemCode=3760041","quantity_box_sales_uom"
amp;salespackquantity=1amp;itemCode=2313441","quantity_box
 

Мне нужно взять номера 3760041 и 2313441 соответственно. Как должно выглядеть регулярное выражение?

Комментарии:

1. вам нужно использовать регулярное выражение или будут работать строковые манипуляции?

2. да, мне нужно регулярное выражение

3. пожалуйста, сделайте попытку

4. я пробую ItemCode=[0-9]*» но он сохраняет всю строку, и мне нужны только цифры (которые находятся между ItemCode= и «)

Ответ №1:

Если мы имеем дело только с линейными данными, как вы показываете, это может быть так же просто, как:

 .*itemCode=([0-9] ).*
 

Что жестоко, но сделало бы свою работу. Вы бы извлекли первую подходящую группу.

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

Пример

 >>> import re
>>> oneline = "salespackquantity=1amp;itemCode=3760041","quantity_box_sales_uom""
>>> match = re.search('.*itemCode=([0-9] ).*', oneline)
>>> match.group(0)
'salespackquantity=1amp;itemCode=3760041","quantity_box_sales_uom"'
>>> match.group(1)
'3760041'
 

Вам действительно нужно регулярное выражение?

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

Несколько других стратегий могут быть проще:

  • сначала удалите ненужные данные,
  • используйте соответствующий анализатор для вашего конкретного контента (здесь это выглядит как сочетание строк CSV-запроса и URL-адреса).,
  • даже не утруждайтесь и вырезайте по соответствующим границам, если формат фиксированный.

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

Комментарии:

1. в вашем примере выбирается весь текст, и мне нужны только эти цифры (которые находятся между кодом элемента= и «).

2. @user461101: Нет. Это зависит от того, как вы используете мой пример. Обратите внимание, что я сказал извлечь первую соответствующую группу, которая будет числовой частью.

3. @user461101: Я скорректировал свой ответ, чтобы показать вам, как это делается, на живом примере из РЕПЛА python.

4. в моем случае это не работает. вот мое выражение ItemCode=([0-9] ). , как изменить его так, чтобы выбирались только числа, потому что теперь выбрана вся строка (ItemCode=3760041″)

5. @user461101: если вы не покажете свой код, я не смогу вам помочь. Я привел вам реальный рабочий пример непосредственно из репла Python 3. Я не знаю вашего дела, так как не знаю ваших точных данных, вашего кода и того, как вы его запускаете.

Ответ №2:

 a = "example is the int and string 223576"
ext = []
b = "1234567890"
for i in a:
    if i in b:
        ext.append(i)
print(ext)
 

Комментарии:

1. Хм, это мило и все такое, но не совсем работает. 1/ Вы предполагаете, что позиции в A и B идентичны (это не так). 2/И также собирал бы непоследовательные символы в строке (например, «something2then234andthenagain76»).

2. Он будет работать и выбираться как последовательность строк, а не как буквенно-цифровой индекс. Может быть, у кого-то есть другая идея.

3. Пожалуйста, не публикуйте только код в качестве ответа, но также предоставьте объяснение того, что делает ваш код и как он решает проблему вопроса. Ответы с объяснением, как правило, более полезны и более качественны, и с большей вероятностью привлекут внимание.