গ্রেপ-ভি এর পাইথন সমতুল্য কত?


14

আমি চাই grep -v। আমি সব সময় এটি ব্যবহার করি। তবে আমি পাইথনটিতে কিছু পাঠ্য প্রক্রিয়াজাতকরণও করছি, এবং এর মধ্যে একটি গুরুত্বপূর্ণ বিষয় আমারও নেই।

সাধারণত, আমি grep -vবহির্মুখী জিনিসগুলি পাঠ্যের বাইরে রাখি।

এই ক্ষেত্রে,

$ grep -v '[a-z]'
# (I manually review this output to confirm that I don't want those lines)

$ grep '[a-z]' > linesiwanted

তবে আমি কীভাবে পাইথনের কোনও রেজেক্সের পরিপূরকটি মেলে? উদাহরণস্বরূপ, এর পরিপূরক \w?



এসও তে পাইথন-তে
গ্রাইপ

\ ডাব্লু = কোনও শব্দের চর \ ডাব্লু = কোনও
শব্দহীন

উত্তর:


18

পাইথনের একটি রেজেক্স, হয় searchবা matchপদ্ধতিগুলি, কোনও Matchঅবজেক্টকে ফেরত দেয় বা None। জন্য grep -vসমতুল্য, আপনি ব্যবহার করতে পারেন:

import re
for line in sys.stdin:
    if re.search(r'[a-z]', line) is None:
        sys.stdout.write(line)

বা আরও সংক্ষিপ্তভাবে:

import re; sys.stdout.writelines([line for line in sys.stdin if re.search(r'[a-z]', line) is None])

মন্তব্যে এসও লিঙ্কটি +1 নেতিবাচক-দৃষ্টিভঙ্গির দৃser়তার উল্লেখ করেছে তবে সত্যি বলতে আমি আপনার স্নিপেটটি অনেক বেশি সংবেদনশীল এবং মার্জিত বলে মনে করি। ধন্যবাদ।
ixtmixilix

দেখা যাচ্ছে আপনি সেটটির পরিপূরক মেলে [^ আজ] ব্যবহার করতে পারেন [
এজে

1

দেখা যাচ্ছে আপনি বোঝাতে কেবল [^Z] ব্যবহার করতে পারেন grep -v [a-z]

আমি এটি ব্যবহার করছি:

#!/usr/bin/env python
# coding=UTF-8

import sys, re

for file in sys.argv[1:]:
    f = open(file)
    string = f.read()
    regex = re.compile('[^a-z]')
    subs = regex.sub('', string)
    f.close()
    print subs

এগুলি এক নয়। grep -v '[a-z]'মানে হলো "থেকে সীমার মধ্যে একটি অক্ষর ধারণকারী কোনো লাইন বাদ aথেকে z" কিন্তু আপনি প্রয়োগ করেছি grep '[^a-z]'যার মানে "একটি অক্ষর ধারণকারী কোনো লাইন অন্তর্ভুক্ত না থেকে সীমার মধ্যে aথেকে z।" যদি কোনও লাইনে থাকে abc123তবে আপনার ক্যোয়ারী ভুলভাবে এটি মুদ্রণ করবে কারণ 1সেই মানদণ্ডকে সন্তুষ্ট করে। grep -v '[a-z]'এই লাইনটি মুদ্রণ করবে না কারণ aউপেক্ষিত মানদণ্ডকে সন্তুষ্ট করে।
অ্যাডাম কাটজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.