سؤال

أنا أتساءل لماذا لا يتطابق ريجيكس التالية.

string query = "\"1 2\" 3";
string pattern = string.Format(@"\b{0}\b", Regex.Escape("\"1 2\""));
string repl = Regex.Replace(query, pattern, "", RegexOptions.CultureInvariant);

لاحظ أنه إذا قمت بإزالة كلمة حرف حدود ( B) من pattern, ، يطابق بشكل جيد. هل هناك شيء ما حول " B" قد ينطلق هذا؟

هل كانت مفيدة؟

المحلول

اقتباس ليس حرفا كلمة، حتى B لن يكون مباراة إذا كان هناك. لا يوجد حرف كلمة قبل الاقتباس؛ لذلك، قبل الاقتباس، لا يوجد انتقال بين أحرف الكلمات والأحرف غير النصية. لذلك، لا تطابق.

من تعليقك، تحاول إزالة أحرف الكلمات من سلسلة. الطريقة الأكثر وضوحا للقيام بذلك سيكون ليحل محل \w مع سلسلة فارغة:

string repl = Regex.Replace(query, "\w", "", RegexOptions.CultureInvariant);

نصائح أخرى

كنت تتوقع بيضاء بيضاء. لا يجد واحد. يحل محل

string query = "\"1 2\" 3";

مع

string query = "\" 1 2 \" 3";

وسترى ما أعنيه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top