/ / रेगेक्स स्ट्रिंग में एक भी चरित्र से मेल खाने के लिए - जावा, जावास्क्रिप्ट, रेगेक्स

स्ट्रिंग - जावा, जावास्क्रिप्ट, रेगेक्स में एक ही चरित्र से मेल खाने के लिए रेगेक्स

मैं एकल चरित्र को एक स्थान के साथ बदलने के लिए (या उन्हें हटाना) चाहता हूं।

उदाहरण के लिए यदि मेरे पास है:

" I have played u with no i and no j o o o o x w x x s"

इसे वापस करना चाहिए:

" have played with no and"

मैं प्रयास कर चुका हूं:

s+w{1}s+

लेकिन जब मैं इसका उपयोग करता हूं तो मुझे यह मिलता है:

" have played with no and no o o x x s"

मुझे कुछ याद आ रहा है? मुझे लगता है कि यह "ओवरलैपिंग मैचों" के कुछ प्रकार से संबंधित है।

उत्तर:

जवाब के लिए 2 № 1

आपका रेगेक्स इस तरह काम करता है:

खोज space एक पात्र फिर दूसरा space, और इसे हटा दें। इस स्थिति में, जो एक वर्ण को घेरता है, "किसी अन्य वर्ण के परीक्षण में मिलान नहीं किया जा सकता है जैसे कि

_a_b_c
^^^ -this part matches our pattern so it will be removed leaving

b_c and now neither `b` or `c` is surrounded with spaces so they will not
be removed

इस समस्या को हल करने के लिए बस एक या अधिक रिक्त स्थान (या स्ट्रिंग की शुरुआत) और इसके बाद एक वर्ण शामिल करें (^|s+)w.
यह सुनिश्चित करने के लिए कि इस वर्ण के बाद एक स्थान (या स्ट्रिंग का अंत) है, लेकिन इस रिक्त स्थान को मैच में शामिल नहीं करने के लिए जिसका आप उपयोग कर सकते हैं भविष्य का ध्यान करना तंत्र की तरह (?=s+|$).

तो जावा के मामले में प्रयास करें

String newString = yourString.replaceAll("(^|\s+)\w(?=\s+|$)","");

और जावास्क्रिप्ट में

var replaced = text.replace(/(^|s+)w(?=s+|$)/g,"")

BTW w से किसी भी पात्र का मिलान करेगा [a-zA-Z0-9_] तो आप इसे कुछ इस तरह से बदल सकते हैं [a-zA-Z] यदि आप केवल पत्र चाहते हैं।


उत्तर № 2 के लिए 1

मुझे लगता है कि भाषा जावास्क्रिप्ट है (कृपयाअपने टैग की जाँच करें)। मेरे द्वारा देखी गई समस्या आपके रेगेक्स में रिक्त स्थान शामिल है, इसलिए यदि आपके पास "ए बी बी" है, तो यह "ए" के साथ मेल खाता है, लेकिन फिर सी में पहले या बाद में कोई रिक्त स्थान नहीं है।

var text=" a bb c dd e f g tt"
var re=/s*bwb/g //If you"re coding in Java, remove the g: "\s*\b\w\b"
text.replace(re,"") //" bb dd tt"