#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. Пожалуйста, не публикуйте только код в качестве ответа, но также предоставьте объяснение того, что делает ваш код и как он решает проблему вопроса. Ответы с объяснением, как правило, более полезны и более качественны, и с большей вероятностью привлекут внимание.