В C#, как найти все слова, начинающиеся с знака '$' и заканчивающиеся пробелом, в длинной строке, используя регулярные выражения?
ответ
Try:
var matches = Regex.Matches(input, "(\\$\\w+) ");
В вышеприведенном \\w
соответствует символам слова. Это A-Z, a-z, - и _ если я прав. Если вы хотите совместить все, что не является пространством, вы можете использовать \\S
. Если вам нужен определенный набор, укажите это, например, [a-zA-Z0-9]
.
Кронштейны вокруг (\\$\\w+)
обеспечивают соответствие определенного соответствия, matches[0].Groups[1].Value;
дает значение внутри спинок (так, исключая конечное пространство).
В полном примере:
string input = "$a1 $a2 $b1 $b2";
foreach (Match match in Regex.Matches(input, "(\\$\\w+) "))
{
Console.WriteLine(match.Groups[1].Value);
}
Это дает следующий результат:
$a1
$a2
$b1
в $ В2 конечно опущено, поскольку он не имеет косое пространства.
var a1 = "fdjksf $jgjkd $hfj".Split(" ".ToCharArray())
.ToList()
.Where(X=>Regex.Match(X , "(\\$[a-zA-Z]*)").Success);
Спасибо за ваш быстрый ответ, но это только возвращает мне последний матч из строки, я хочу получить все матчи. –
Отредактировано в ...... –
Вы можете попробовать его без регулярных выражений, которые могут быть быстрее.
string longText = "";
List<string> found = new List<string>();
foreach (var item in longText.Split(' '))
{
if (item.StartsWith("$"))
{
found.Add(item);
}
}
EDIT: После комментария Zain Шейха Я написал простую программу для теста, здесь идет результаты.
string input = "$a1 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2 $a2 $b1 $b2";
var s1 = Stopwatch.StartNew();
double first;
foreach (Match match in Regex.Matches(input, "(\\$\\w+) "))
{
}
s1.Stop();
Console.WriteLine(" 1) " + (s1.Elapsed.TotalMilliseconds * 1000 * 1000).ToString("0.00 ns"));
first = s1.Elapsed.TotalMilliseconds;
s1.Reset();
s1 = Stopwatch.StartNew();
foreach (var item in input.Split(' '))
{
if (item.StartsWith("$"))
{
}
}
s1.Stop();
Console.WriteLine(" 2) " + (s1.Elapsed.TotalMilliseconds * 1000 * 1000).ToString("0.00 ns"));
Console.WriteLine(s1.Elapsed.TotalMilliseconds - first);
Выход:
1) 730600.00 ns
2) 53000.00 ns
-0.6776
Это означает, что строковые функции (также с Еогеаспом) быстрее, чем функции регулярных выражений;)
Я думаю, что вы не работали над оптимизацией производительности, метод split и foreach loop itslef критичны по производительности, поэтому я всегда стараюсь их избегать, и именно поэтому я попросил регулярное выражение в моем вопрос. –
Пожалуйста, проверьте часть «edit» моего ответа. –
hmm, хороший пример, я впечатлен, мне когда-то приходилось работать с методом Split и foreach, они оба были критичными по производительности, поэтому мы пользовательские альтернативы. –
- 1. Как найти все слова, начинающиеся с | b и заканчивающиеся на | b. (Пример: «наречие» и «балалайка»)
- 2. preg_replace, чтобы удалить все слова, начинающиеся с http: // и заканчивающиеся пробелом
- 3. Python Regex: найти все строки, начинающиеся с '{' и заканчивающиеся на '}'
- 4. Как вы находите слова, заканчивающиеся и начинающиеся с определенного leter или элемента в строке, используя php
- 5. соответствующие слова, начинающиеся и заканчивающиеся на ту же букву
- 6. Как найти слова, начинающиеся с определенного письма?
- 7. Как найти английские слова в длинной случайной строке?
- 8. Использование предикатов найти строки, начинающиеся и заканчивающиеся на A
- 9. Два слова в одной строке с пробелом
- 10. RegEx, чтобы найти символы, начинающиеся и заканчивающиеся знаком хэштега/фунта?
- 11. Как найти слова, заканчивающиеся на ing
- 12. Как найти все слова в строке C#
- 13. Regex Match строки, начинающиеся и заканчивающиеся на
- 14. PHP, проверяющий несколько слов в длинной одной строке слова
- 15. Как удалить все слова, начинающиеся с другого полного слова
- 16. Как получить слова, начинающиеся с «#» в строке с использованием php?
- 17. Как формировать регулярное выражение, которое отфильтровывает слова, начинающиеся с == и заканчивающиеся на ==?
- 18. Найти параметры, начинающиеся с тире в строке
- 19. Найти слова, начинающиеся с определенного слова в regex
- 20. Regex найти слова, начинающиеся с двоеточия
- 21. Как заменить подстроки, начинающиеся с «X» и заканчивающиеся на «.tif»?
- 22. Найти шаблоны в длинной строке?
- 23. AS3 - Найти слова, разделенные пробелом и хешем
- 24. .Net Найти все слова смещения в строке
- 25. найти все слова, начинающиеся с @ и содержащие все символы, кроме пробелов в регулярном выражении
- 26. (PHP) Как найти слова, начинающиеся с шаблона, и заменить их все?
- 27. Найти все строки, не заканчивающиеся с рисунком
- 28. Как совместить все слова, начинающиеся со знака доллара, но не слэш доллара
- 29. Как найти все слова, начинающиеся с my_str в RDD строк, используя pyspark и regex?
- 30. Заменить слова, начинающиеся с подчеркивания
спасибо за быстрый ответ, но это только возвращает меня последний матч из строки я хочу получить все совпадения. –
Я изложил ответ на примере. Я не понимаю, почему это не вернет все элементы в вашем тестовом входе. Не могли бы вы предоставить пример ввода, который возвращает только последнее совпадение? –
Oh Извините, ваше регулярное выражение отлично работает, на самом деле я не перебирал ни одного совпадения, я использовал ваши совпадения кода [0] .Groups [1] .Value; и я получал только один матч. см. следующий код, он работает правильно и возвращает все совпадения. добавление кода в следующий комментарий. –