मेरे पास यूआरएल की एक सूची है जो इस तरह दिखती है:

http://example.com/php?id=2
https://example.com/?
http://example.com/ip/admin/navigate?
http://example.com/admin?page=2&id=3
https://www.google.com/#q=query

मुझे क्या करना है इन यूआरएल को एक क्वेरी स्ट्रिंग के लिए स्कैन करना है और केवल उस आउटपुट को आउटपुट करना है जिसमें वह क्वेरी है। उदाहरण के लिए, अपेक्षित आउटपुट होगा:

http://example.com/php?id=2
http://example.com/admin?page=2&id=3

मैं ऐसा करने का विचार लेकर आया हूं:

res = []

with open('textfile.txt', 'a+') as data:
    for line in data.readlines():
        if '?' in line:
            res.append(line)
return res

हालांकि, यह सब कुछ हड़प लेगा जिसमें इस यूआरएल सहित ? है: https://example.com/? क्या कोई ऐसा तरीका है जिससे मैं एक क्वेरी स्ट्रिंग के साथ सभी लिंक पकड़ सकता हूं, केवल एक प्रश्न चिह्न वाले लोगों से परहेज कर रहा हूं?

0
User9123 3 जिंदा 2017, 21:13

3 जवाब

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

रेगेक्स का उपयोग करना:

import re

query_regex = re.compile("(.*)[?|#](.*){1}\=(.*)")
urls = """http://example.com/php?id=2
https://example.com/?
http://example.com/ip/admin/navigate?
http://example.com/admin?page=2&id=3
https://www.google.com/#q=query""".split("\n")

for url in urls:
    match = query_regex.match(url)
    if match:
        print(match.group())
1
BlackVirusScript 3 जिंदा 2017, 21:26

एक आसान तरीका यह जांचना है कि प्रश्न चिह्न स्ट्रिंग में है, लेकिन अंतिम चार के रूप में नहीं:

res = []

with open('textfile.txt', 'r') as data:
    for line in data.readlines():
        if '?' in line and not line.endswith('?'):
            res.append(line)
return res

आप रेगेक्स या अन्य समाधानों का भी उपयोग कर सकते हैं, मुझे लगता है कि यह सबसे आसान है।

1
Dekel 3 जिंदा 2017, 21:15

शायद इससे गलत समाधान निकलेंगे लेकिन आप = संकेतों के लिए भी परीक्षण कर सकते हैं

res = []

with open('textfile.txt', 'a+') as data:
    for line in data.readlines():
        if '=' in line:
            res.append(line)
return res
0
MYGz 3 जिंदा 2017, 21:31