मेरे पास निम्नलिखित पायथन कोड है और user और its number को प्रिंट करने का प्रयास करते समय regex मैंने निम्नलिखित किया:

import re


txt = '''Element.update("to_users2", "\n\n\n<div class=\"label-field-pair\">\n  <div class=\"label-field-pair11\">\n    <label for=\"student_grade\">Select member</label>\n    <div class =\"scrolable\" >\n      <div class=\"scroll-inside\">\n        <div class=\"hover\"><a href=\"#\" class=\"all\" onClick=\"add_all_recipient('0000000,1111111,2222222,3333333,4444444,5555555,6666666,7777777,8888888,9999999')\">Select All  <span> Add </span></a>\n\n        </div>\n        \n          \n          <div class=\"hover\"><a href=\"#\" before=\"Element.show('loader')\" class=\"individual\" onClick=\"add_recipient(0000000)\" success=\"Element.hide('loader')\">user zero M ...<span> Add </span></a>\n\n          </div>\n        \n          \n          <div class=\"hover\"><a href=\"#\" before=\"Element.show('loader')\" class=\"individual\" onClick=\"add_recipient(1111111)\" success=\"Element.hide('loader')\">user One S ...<span> Add </span></a>\n\n          </div>\n        \n          \n          <div class=\"hover\"><a href=\"#\" before=\"Element.show('loader')\" class=\"individual\" onClick=\"add_recipient(2222222)\" success=\"Element.hide('loader')\">user Two A ...<span> Add </span></a>\n\n          </div>\n        \n          \n          <div class=\"hover\"><a href=\"#\" before=\"Element.show('loader')\" class=\"individual\" onClick=\"add_recipient(3333333)\" success=\"Element.hide('loader')\">user three H ...<span> Add </span></a>\n\n          </div>\n        \n          \n          <div class=\"hover\"><a href=\"#\" before=\"Element.show('loader')\" class=\"individual\" onClick=\"add_recipient(4444444)\" success=\"Element.hide('loader')\">user four M ...<span> Add </span></a>\n\n          </div>\n        \n          \n          <div class=\"hover\"><a href=\"#\" before=\"Element.show('loader')\" class=\"individual\" onClick=\"add_recipient(5555555)\" success=\"Element.hide('loader')\">user Five O ...<span> Add </span></a>\n\n          </div>\n        \n          \n          <div class=\"hover\"><a href=\"#\" before=\"Element.show('loader')\" class=\"individual\" onClick=\"add_recipient(6666666)\" success=\"Element.hide('loader')\">user six F ...<span> Add </span></a>\n\n          </div>\n        \n          \n          <div class=\"hover\"><a href=\"#\" before=\"Element.show('loader')\" class=\"individual\" onClick=\"add_recipient(7777777)\" success=\"Element.hide('loader')\">user Seven Mo ...<span> Add </span></a>\n\n          </div>\n        \n          \n          <div class=\"hover\"><a href=\"#\" before=\"Element.show('loader')\" class=\"individual\" onClick=\"add_recipient(8888888)\" success=\"Element.hide('loader')\">user eight ...<span> Add </span></a>\n\n          </div>\n        \n          \n          <div class=\"hover\"><a href=\"#\" before=\"Element.show('loader')\" class=\"individual\" onClick=\"add_recipient(9999999)\" success=\"Element.hide('loader')\">\u0650user nine M ...<span> Add </span></a>\n\n          </div>\n        \n      </div>\n    </div>\n  </div>\n</div>\n\n\n");'''


regexp = re.findall(
            r"add_recipient\(([0-9]+)\)\" success=.+>([a-zA-Z0-9\w]+) ", txt)

for x in regexp:
    print(x[1],  x[0])

उपरोक्त python code को निष्पादित करते हुए यह निम्नानुसार प्रिंट करता है:

user 0000000
user 1111111
User 2222222
user 3333333
user 4444444
user 5555555
user 6666666
user 7777777
user 8888888

मुझे आउटपुट प्राप्त करने की आवश्यकता थी:

user Zero 0000000
user One 1111111
...

मुझे ऐसा आउटपुट कैसे मिल सकता है? कुछ मामलों में re.findall केवल user 8888888 लौटाता है और मुझे नहीं पता क्यों। लेकिन मैं पूरा मैच कैसे प्राप्त कर सकता हूं?

0
hanan 6 जिंदा 2022, 17:38

3 जवाब

सबसे बढ़िया उत्तर

एक्सएमएल/एचटीएमएल को पार्स करने के लिए रेगेक्स का उपयोग करना बुरा अभ्यास है, इसके लिए एक पार्सर का उपयोग करें (थोड़ी सी रेगेक्स सहायता के साथ):

from bs4 import BeautifulSoup
import re

soup = BeautifulSoup(txt)

out = []
for e in soup.find_all('a', onclick=True):
    m = re.search('(?<=add_recipient\().*(?=\))', e['onclick'])
    if m:
        a = m.group()
        out.append((e.contents[0], a))

आउटपुट:

[('user zero M ...', '0000000'),
 ('user One S ...', '1111111'),
 ('user Two A ...', '2222222'),
 ('user three H ...', '3333333'),
 ('user four M ...', '4444444'),
 ('user Five O ...', '5555555'),
 ('user six F ...', '6666666'),
 ('user Seven Mo ...', '7777777'),
 ('user eight ...', '8888888'),
 ('ِuser nine M ...', '9999999')]

वैकल्पिक आउटपुट (नाम के केवल पहले 2 शब्द), अंतिम पंक्ति को इसके साथ बदलें:

out.append((' '.join(e.contents[0].split(maxsplit=2)[:2]), a))

आउटपुट:

[('user zero', '0000000'),
 ('user One', '1111111'),
 ('user Two', '2222222'),
 ('user three', '3333333'),
 ('user four', '4444444'),
 ('user Five', '5555555'),
 ('user six', '6666666'),
 ('user Seven', '7777777'),
 ('user eight', '8888888'),
 ('ِuser nine', '9999999')]
2
mozway 6 जिंदा 2022, 17:58

आप एक अतिरिक्त कैप्चर समूह जोड़ सकते हैं, और उस क्रम को बदल सकते हैं जिसमें आप समूह मान मुद्रित करते हैं।

ध्यान दें कि आप [a-zA-Z0-9\w]+ को \w+ के रूप में लिख सकते हैं क्योंकि वह भी a-zA-Z0-9 से मेल खाता है।

.+> के बजाय आप कुछ बैकट्रैकिंग को रोकने के लिए [^<>]*> का उपयोग कर सकते हैं, नकारा वर्ण वर्ग के साथ कोण कोष्ठक को पार नहीं कर सकते।

import re

txt = '''Element.update("to_users2", "\n\n\n<div class=\"label-field-pair\">\n  <div class=\"label-field-pair11\">\n    <label for=\"student_grade\">Select member</label>\n    <div class =\"scrolable\" >\n      <div class=\"scroll-inside\">\n        <div class=\"hover\"><a href=\"#\" class=\"all\" onClick=\"add_all_recipient('0000000,1111111,2222222,3333333,4444444,5555555,6666666,7777777,8888888,9999999')\">Select All  <span> Add </span></a>\n\n        </div>\n        \n          \n          <div class=\"hover\"><a href=\"#\" before=\"Element.show('loader')\" class=\"individual\" onClick=\"add_recipient(0000000)\" success=\"Element.hide('loader')\">user zero M ...<span> Add </span></a>\n\n          </div>\n        \n          \n          <div class=\"hover\"><a href=\"#\" before=\"Element.show('loader')\" class=\"individual\" onClick=\"add_recipient(1111111)\" success=\"Element.hide('loader')\">user One S ...<span> Add </span></a>\n\n          </div>\n        \n          \n          <div class=\"hover\"><a href=\"#\" before=\"Element.show('loader')\" class=\"individual\" onClick=\"add_recipient(2222222)\" success=\"Element.hide('loader')\">user Two A ...<span> Add </span></a>\n\n          </div>\n        \n          \n          <div class=\"hover\"><a href=\"#\" before=\"Element.show('loader')\" class=\"individual\" onClick=\"add_recipient(3333333)\" success=\"Element.hide('loader')\">user three H ...<span> Add </span></a>\n\n          </div>\n        \n          \n          <div class=\"hover\"><a href=\"#\" before=\"Element.show('loader')\" class=\"individual\" onClick=\"add_recipient(4444444)\" success=\"Element.hide('loader')\">user four M ...<span> Add </span></a>\n\n          </div>\n        \n          \n          <div class=\"hover\"><a href=\"#\" before=\"Element.show('loader')\" class=\"individual\" onClick=\"add_recipient(5555555)\" success=\"Element.hide('loader')\">user Five O ...<span> Add </span></a>\n\n          </div>\n        \n          \n          <div class=\"hover\"><a href=\"#\" before=\"Element.show('loader')\" class=\"individual\" onClick=\"add_recipient(6666666)\" success=\"Element.hide('loader')\">user six F ...<span> Add </span></a>\n\n          </div>\n        \n          \n          <div class=\"hover\"><a href=\"#\" before=\"Element.show('loader')\" class=\"individual\" onClick=\"add_recipient(7777777)\" success=\"Element.hide('loader')\">user Seven Mo ...<span> Add </span></a>\n\n          </div>\n        \n          \n          <div class=\"hover\"><a href=\"#\" before=\"Element.show('loader')\" class=\"individual\" onClick=\"add_recipient(8888888)\" success=\"Element.hide('loader')\">user eight ...<span> Add </span></a>\n\n          </div>\n        \n          \n          <div class=\"hover\"><a href=\"#\" before=\"Element.show('loader')\" class=\"individual\" onClick=\"add_recipient(9999999)\" success=\"Element.hide('loader')\">\u0650user nine M ...<span> Add </span></a>\n\n          </div>\n        \n      </div>\n    </div>\n  </div>\n</div>\n\n\n");'''

for x in re.findall(r"add_recipient\(([0-9]+)\)\" success=[^<>]*>(\w+) (\w+)", txt):
    print(x[1], x[2], x[0])

उत्पादन

user zero 0000000
user One 1111111
user Two 2222222
user three 3333333
user four 4444444
user Five 5555555
user six 6666666
user Seven 7777777
user eight 8888888
0
The fourth bird 6 जिंदा 2022, 17:50

मैं रेगेक्स का विशेषज्ञ नहीं हूं

तुम कोशिश कर सकते हो:

out = re.findall(r"add_recipient\(([0-9]+)\)\" success=.+>(\w+\s+\w+)", txt)
print(*[' '.join(i[::-1]) for i in out], sep='\n')

# Output
user zero 0000000
user One 1111111
user Two 2222222
user three 3333333
user four 4444444
user Five 5555555
user six 6666666
user Seven 7777777
user eight 8888888
0
Corralien 6 जिंदा 2022, 17:53