2011-04-29 19 views
13

मुझे एक रेगेक्स की आवश्यकता है जो मुझे एक विशिष्ट शब्द से पहले और बाद में शब्द देता है, जिसमें खोज शब्द स्वयं भी शामिल होता है।एक विशिष्ट शब्द से पहले और उसके बाद एक शब्द खोजने के लिए regex

की तरह: "यह एक शब्द खोजने के लिए कुछ डमी पाठ है" मुझे के एक स्ट्रिंग देना चाहिए "डमी पाठ करने के लिए" पाठ मेरे खोज शब्द है जब।

एक और सवाल, यह संभव है कि प्रदान की गई स्ट्रिंग में खोज शब्द के बाद और अधिक होगा, इसलिए मैं उस स्ट्रिंग में सी # के साथ सभी मैचों को पुनर्प्राप्त करने में सक्षम होना चाहिए।

की तरह "यह एक स्ट्रिंग में एक शब्द पाठ और शब्द के साथ पूर्ण लगाने के लिए कुछ डमी पाठ है" लौट चाहिए:

  • "डमी पाठ करने के लिए"
  • "पाठ के साथ और "

संपादित करें: दरअसल मुझे उन सभी मैचों में लौटा होना चाहिए जिनमें खोज शब्द शामिल है। कुछ उदाहरण: टेक्स्ट भी पढ़ा जाता है। -> पाठ

मेरा टेक्स्ट पढ़ें। अच्छी तरह से

+0

और क्या होगा यदि स्ट्रिंग "मुझे डमी को टेक्स्ट टेक्स्ट करने की आवश्यकता है"? क्या इसे "टेक्स्ट टेक्स्ट" और "टेक्स्ट टेक्स्ट टू" पर वापस जाना चाहिए? –

+0

वास्तव में, मेरे खोज शब्द से पहले और बाद में शब्द, जो भी हो सकता है :) – PitAttack76

+0

'" एक पाठ दो पाठ तीन "के बारे में क्या? यानी क्या आपको ओवरलैपिंग मैचों को संभालने की ज़रूरत है? – ridgerunner

उत्तर

15

संपादित करें:

आप शब्द के बाद सभी जगह के लिए सबसे पहले शब्द से पहले अंतरिक्ष से सामग्री हड़पने चाहते हैं उपयोग:

(?:\S+\s)?\S*text\S*(?:\s\S+)? 

एक साधारण परीक्षण:

string input = @" 
    This is some dummy text to find a word in a string full with text and words 
    Text is too read 
    Read my text. 
    This is a text-field example 
    this is some dummy [email protected] to read"; 

var matches = Regex.Matches(
    input, 
    @"(?:\S+\s)?\S*text\S*(?:\s\S+)?", 
    RegexOptions.IgnoreCase 
); 

मैचों हैं:

dummy text to 
with text and 
Text is 
my text. 
a text-field example 
dummy [email protected] to
+0

अच्छा लग रहा है! लेकिन अगर शब्द के पहले या बाद में अन्य वर्ण हैं तो क्या होगा? @ या की तरह या कुछ कुछ। शब्द के बाद अंतरिक्ष में पहले शब्द से पहले अंतरिक्ष से सभी सामग्री को पकड़ना संभव है? तो "यह कुछ डमी [email protected] पढ़ने के लिए" होगा "अभी भी" डमी [email protected] "में परिणाम होगा, लेकिन इस तरह सभी अन्य वर्ण और शब्द शामिल हैं। इस तरह के दर्द होने के लिए सूखी। या मुझे हल करना चाहिए यह regex के बिना? – PitAttack76

+0

मैं पाठ से पहले और पाठ के बीच पूरी स्ट्रिंग चाहता हूं ..., मैं इसे कैसे कर सकता हूं – Anjali

+0

@Alex क्या आप यह प्रश्न देख सकते हैं http://stackoverflow.com/questions/19131758/how-to-split-a -string-में-एक-सरणी के- तार – Anjali

1
([A-z]+) text ([A-z]+) 

करते हैं - -> अपने पाठ

यह एक पाठ-क्षेत्र उदाहरण है ।

+3

'[ए-जेड] 'आपके विचार से ज्यादा मेल खाता है। आपको कम से कम '[ए-ज़ा-जेड]' की आवश्यकता है (जो अभी भी गैर-ASCII वर्ण वाले शब्दों पर असफल रहेगा ...)। –

2
/[A-Za-z'-]+ text [A-Za-z'-]+/ 

हाइफ़न और यौगिक शब्दों सहित ज्यादातर मामलों में काम करना चाहिए> एक पाठ-क्षेत्र उदाहरण

+0

thx, वह तेज़ था। क्या आप मुझे इस रेगेक्स का उपयोग करने के लिए सी # लाइन दिखा सकते हैं? धन्यवाद! – PitAttack76

+0

मैं सी # प्रोग्रामर नहीं हूं, लेकिन [एमएसडीएन डॉक्स] (http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex।एएसपीएक्स # वाई 6404) सी # में नियमित अभिव्यक्तियों का उपयोग करने का एक बहुत ही संपूर्ण उदाहरण है जो आपके लिए बहुत उपयोगी होना चाहिए। – eykanal

6
//I prefer this style for readability 

string pattern = @"(?<before>\w+) text (?<after>\w+)"; 
string input = "larry text bob fred text ginger fred text barney"; 
MatchCollection matches = Regex.Matches(input, pattern); 

for (int i = 0; i < matches.Count; i++) 
{ 
    Console.WriteLine("before:" + matches[i].Groups["before"].ToString()); 
    Console.WriteLine("after:" + matches[i].Groups["after"].ToString()); 
} 

/* Output: 
before:larry 
after:bob 
before:fred 
after:ginger 
before:fred 
after:barney 
*/ 
संबंधित मुद्दे