PDA

View Full Version : سوال: مشکل کاراکترهای ویژه مثل نقطه و ویرگول



aliahmadi
پنج شنبه 31 خرداد 1397, 17:04 عصر
سلام.
می‌خوام در یک متن یک کلمه رو جستجو کنم و کلمه‌ای دیگه به جاش جایگزین کنم. مثلاً می‌خوام به جای کلمۀ «دیوار» کلمۀ «در» رو جایگزین کنم. این مسأله خیلی ساده به نظر می‌رسه ولی وقتی از replace رشته در سی‌شارپ استفاده می‌کنم، اگر «دیوارها» رو پیدا کنه تبدیل به «درها» می‌کنه و این مطلوب نیست. طبیعتاً برای حل این مشکل باید به جای «%دیوار%» دنبال دیوار با دو طرف کلمه space بگردم ولی مشکل اینجاست که ممکنه بعد یا قبل از «دیوار» بلافصله کاراکترهای ویژه مثل نقطه یا ویرگول باشد و غیره باشد که این باعث میشه که این حالت رو پیدا نکنه.
چه کار میشه کرد؟ آیا استفاده از RegEx کمک می‌کنه؟ اگر بله چطور؟

danialafshari
یک شنبه 03 تیر 1397, 16:47 عصر
با سلام
بدلیل اینکه توضیحتون زیاد واضح نیست، جواب نگرفتید
مثلاً اگر بعد از دیوار (،) گذاشته شود کلاً چنین نگارشی غلط هست => دیوار، ها
چند جمله از مشکلات بوجود اومده مثال بزنید تا بهتر بشه راهنمایی کرد
موفق باشید

محمد آشتیانی
سه شنبه 05 تیر 1397, 18:08 عصر
سلام
https://stackoverflow.com/questions/13870725/how-to-search-and-replace-exact-matching-strings-only

sds1920
سه شنبه 12 تیر 1397, 09:23 صبح
سلام.
می‌خوام در یک متن یک کلمه رو جستجو کنم و کلمه‌ای دیگه به جاش جایگزین کنم. مثلاً می‌خوام به جای کلمۀ «دیوار» کلمۀ «در» رو جایگزین کنم. این مسأله خیلی ساده به نظر می‌رسه ولی وقتی از replace رشته در سی‌شارپ استفاده می‌کنم، اگر «دیوارها» رو پیدا کنه تبدیل به «درها» می‌کنه و این مطلوب نیست. طبیعتاً برای حل این مشکل باید به جای «%دیوار%» دنبال دیوار با دو طرف کلمه space بگردم ولی مشکل اینجاست که ممکنه بعد یا قبل از «دیوار» بلافصله کاراکترهای ویژه مثل نقطه یا ویرگول باشد و غیره باشد که این باعث میشه که این حالت رو پیدا نکنه.
چه کار میشه کرد؟ آیا استفاده از RegEx کمک می‌کنه؟ اگر بله چطور؟

توی پردازش رشته هیچ چیز قدرتمندتر از regex نیست. پس همین رو ادامه بده

sds1920
سه شنبه 12 تیر 1397, 09:31 صبح
برای مثال چیزی به ذهن من میرسه کد زیر هست. ولی نمیگم 100% درسته. باید حالتهایی که میخوای رو تست کنی.


string str="سلام به دیواریهای. عزیز";
var regex = new Regex(@"\s*دیوار\w*[.،:;]*\s*");
var match = regex.Match(str);
if (match.Success)
Console.WriteLine(str.Substring(match.Index, match.Length));