PDA

View Full Version : جستجو و جایگزین کردن یک بار برای هر کلمه



Ebrahim11
یک شنبه 27 اردیبهشت 1394, 13:12 عصر
با سلام

می خواستم بدونم می شه داخل یک جمله در کلمه را یک بار find-replace کرد و رد شد رفت سراغ کلمه بعدی.

بطور مثال متن زیر را داریم:
" یک نفر بازداشت شده بود . من این مرد دستگیر شده را آزاد کردم "

می خواهم داخل این متن کلمه بازداشت تغییر کنه به دستگیر و کلمه دستگیر بشود بازداشت

لطفا کمک کنید خیلی حیاتیه.
با تشکر

hoseinharami
یک شنبه 27 اردیبهشت 1394, 13:45 عصر
سلام
اول بازداشت رو به دستگیر تغییر بده و اندیس اولین حرفشو ذخیره کن
بعد دستگیر رو تغییر بده با این شرط که شروعش از اندیسی که ذخیره کردی نباشه

Davidd
یک شنبه 27 اردیبهشت 1394, 13:54 عصر
سلام. این کاری که میخای انجام بدی در واقع جایگزینی دو کلمه باهم هست و با replace فرق داره.
با یه بار پیمایش از ابتدا تا انتهای رشته میشه اینکارو انجام داد. با تابع IndexOf از ابتدای رشته شروع کن ( تابع IndexOf دو پارامتر میگیره: یکی اون کلمه و دومی ایندکس شروع جستجو). ایندکس برای هردو کلمه بدست بیار و برای اون کلمه که ایندکس کمتری داره جایگزینی انجام بده. حالا دقیقا از بعد از انتهای کلمه جایگزین شده شروع کن و دوباره ایندکس برای هردو کلمه بدست بیار و برای اون کلمه که ایندکس کمتری داره جایگزینی انجام بده و به همین ترتیب تا انتهای رشته.

Javad_raouf
یک شنبه 27 اردیبهشت 1394, 15:19 عصر
اگر منظورتون رو درست متوجه شدم این یک راه حلشه:
string Text = " یک نفر بازداشت شده بود . من این مرد دستگیر شده را آزاد کردم ";
Text = Text.Replace("بازداشت", "@#$%jh&^").Replace("دستگیر", "بازداشت").Replace("@#$%jh&^", "دستگیر");
MessageBox.Show(Text);

Ebrahim11
سه شنبه 29 اردیبهشت 1394, 17:31 عصر
از دوستانی که پاسخ دادن خیلی ممنون .
بهترین روش اینه


;("result = Regex.Replace(result, "(word2|word1)", m => m.Groups[0].Value == "word1" ? "word2" : "word1