Вы можете использовать
var inputList = new List<string>() { "bbb aaa.a1 bbb", "ccc aaa.a2 ccc" };
var result = inputList
.Select(i => Regex.Match(i, @"\baaa\.\S+")?.Value)
.Where(x => !string.IsNullOrEmpty(x))
.ToList();
foreach (var s in result)
Console.WriteLine(s);
Вывод:
aaa.a1
aaa.a2
См. C # demo
Партия Regex.Match(i, @"\baaa\.\S+")?.Value
пытается соответствоватьследующий шаблон в каждом элементе:
\b
- граница слова aaa\.
- подстрока aaa.
\S+
- 1+ nonсимволы пробела.
* .Where(x => !string.IsNullOrEmpty(x))
отбрасывает пустые элементы, которые получаются из элементов без соответствующих строк.