किसी भी वर्ण को 10 से अधिक बार दोहराए जाने के लिए नियमित अभिव्यक्ति


107

मैं एक साधारण नियमित अभिव्यक्ति की तलाश कर रहा हूं ताकि एक ही चरित्र को 10 या अधिक बार दोहराया जा सके। उदाहरण के लिए, यदि मेरे पास क्षैतिज रेखाओं के साथ एक दस्तावेज है, तो:

=================================================

यह =वर्णों की रेखा से मेल खाएगा क्योंकि यह 10 से अधिक बार दोहराया जाता है। ध्यान दें कि मैं किसी भी चरित्र के लिए काम करना चाहूंगा ।


2
इस asnwer का शीर्षक भ्रामक है, आपको कहना चाहिए कि 'किसी भी वर्ण को 10 से अधिक बार दोहराए जाने के लिए नियमित अभिव्यक्ति'
dalloliogm

जवाबों:


157

आपकी जरूरत regex है /(.)\1{9,}/

परीक्षा:

#!perl
use warnings;
use strict;
my $regex = qr/(.)\1{9,}/;
print "NO" if "abcdefghijklmno" =~ $regex;
print "YES" if "------------------------" =~ $regex;
print "YES" if "========================" =~ $regex;

यहाँ \1इसे एक बैकरेन्सी कहा जाता है। यह संदर्भ देता है कि .कोष्ठक के बीच डॉट द्वारा क्या पकड़ा गया है (.)और फिर {9,}एक ही वर्ण के नौ या अधिक के लिए पूछता है। इस प्रकार यह किसी एक वर्ण के दस या अधिक मेल खाता है।

यद्यपि उपरोक्त परीक्षण स्क्रिप्ट पर्ल में है, यह बहुत ही मानक रेगेक्स सिंटैक्स है और इसे किसी भी भाषा में काम करना चाहिए। कुछ वेरिएंट में आपको अधिक बैकस्लैश का उपयोग करने की आवश्यकता हो सकती है, जैसे Emacs आपको \(.\)\1\{9,\}यहां लिखेंगे ।

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

my $regex = qr/^(.)\1{9,}$/;

28

पायथन में आप उपयोग कर सकते हैं (.)\1{9,}

  • (।) एक चार (किसी भी चार) से समूह बनाता है
  • \ 1 {9,} 1 समूह के नौ या अधिक वर्णों से मेल खाता है

उदाहरण:

txt = """1. aaaaaaaaaaaaaaa
2. bb
3. cccccccccccccccccccc
4. dd
5. eeeeeeeeeeee"""
rx = re.compile(r'(.)\1{9,}')
lines = txt.split('\n')
for line in lines:
    rxx = rx.search(line)
    if rxx:
        print line

आउटपुट:

1. aaaaaaaaaaaaaaa
3. cccccccccccccccccccc
5. eeeeeeeeeeee

अगर re.search (लाइन): प्रिंट लाइन (आरएक्सएक्स वेरिएबल के लिए असाइनमेंट आवश्यक नहीं है)
dalloliogm

1
आप इस सरल संदर्भ में सही हैं। का उपयोग करते हुए चर rxx मैं आदि rxx.group (1), rxx.start (1) की तरह कुछ कर सकते हैं
मीकल निकलस

5

.किसी भी पात्र से मेल खाता है। पहले से उल्लिखित घुंघराले ब्रेसिज़ के साथ संयोजन में उपयोग किया जाता है:

$: cat > test
========
============================
oo
ooooooooooooooooooooooo


$: grep -E '(.)\1{10}' test
============================
ooooooooooooooooooooooo

हाय जीक और @SilentGhost। आपके उदाहरण के साथ दो कमांड grep -E '([=o])\1{10}' testऔर grep -E '([=o]){10}' testठीक काम करता है ( \1दूसरे कमांड में कमी पर ध्यान दें )। लेकिन कमांड grep -E '([=o])\1{10}' <<< '==o==o==o==o==o==o===o==o==='लाइन से मेल नहीं खाती है! हालांकि \1लाइन के बिना कमांड grep -E '([=o]){10}' <<< '==o==o==o==o==o==o===o==o===':। कृपया आप समझा सकते हैं? चीयर्स;)
18

3

कुछ ऐप्स पर आपको इसे काम करने के लिए स्लैश को हटाने की आवश्यकता होती है।

/(.)\1{9,}/

या यह:

(.)\1{9,}

1

{10,} ऑपरेटर का उपयोग करें:

$: cat > testre
============================
==
==============

$: grep -E '={10,}' testre
============================
==============

1

आप पावरस्ले का उपयोग शब्दों या चरित्र सुधारों को जल्दी से बदलने के लिए भी कर सकते हैं । PowerShell विंडोज के लिए है। वर्तमान संस्करण 3.0 है।

$oldfile = "$env:windir\WindowsUpdate.log"

$newfile = "$env:temp\newfile.txt"
$text = (Get-Content -Path $oldfile -ReadCount 0) -join "`n"

$text -replace '/(.)\1{9,}/', ' ' | Set-Content -Path $newfile

1

PHP का preg_replaceउदाहरण:

$str = "motttherbb fffaaattther";
$str = preg_replace("/([a-z])\\1/", "", $str);
echo $str;

यहां [a-z]चरित्र को हिट करता है, ()फिर इसे \\1बैकरेक्शन के साथ उपयोग करने की अनुमति देता है जो एक और समान चरित्र से मेल खाने की कोशिश करता है (ध्यान दें कि यह पहले से ही लगातार 2 पात्रों को लक्षित कर रहा है), इस प्रकार:

माता पिता

अगर तुमने किया:

$str = preg_replace("/([a-z])\\1{2}/", "", $str);

वह लगातार 3 वर्णों को मिटा रहा होगा, आउटपुट कर रहा है:

उसकी याद में


0
={10,}

मैच =जो 10 या अधिक बार दोहराया जाता है।


1
यकीन है कि यह 10 या अधिक मनमाना अक्षर नहीं लेता है?
एतान

perl -e 'print "NO" if "abcdefghijklmno" =~ /.{10,}/;'

यह गलत था, लेकिन इसे संपादित किया गया है (मेरे जवाब का मिलान करने के लिए जो कुछ नीचे की ओर मिला है, अच्छा है)
dalloliogm

2
जी, मुझे नहीं पता था कि मुझे स्पष्ट रूप से कहना था कि आप चरित्र को किसी भी चीज़ से बदल सकते हैं।
साइलेंटगॉस्ट

0

थोड़ा और सामान्य शक्तियाँ उदाहरण के लिए। पावरशेल 7 में, मैच को अंतिम स्थान सहित हाइलाइट किया गया है (क्या आप स्टैक में हाइलाइट कर सकते हैं?)।

'a b c d e f ' | select-string '([a-f] ){6,}'

a b c d e f 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.