Extract palindromes with RegEx
Здравейте,
попаднах на един интересен въпрос от интервю- "възможно ли е от даден стринг да се извадят всички думи, които са палиндроми, но само чрез използването на RegEx".
Потърсих информация в StackOverflow, но там мненията са доста противоречиви. Някои казват, че това е невъзможно, тъй като Регулярните изрази не поддържат рекурсия. Други казват, че би било възможно само ако дължината на думите е до 4,5 букви.
Интересуваме специално за .Net дали е възможно?
Попаднах на този RegEx за .Net, но https://regex101.com/ твърди, че е грешен.
(?<N>.)+.?(?<-N>\k<N>)+(?(N)(?!))
Ето примерен input:
madam#refer,##invalid% kayak%% invalid
output:
madam, refer, kayak
Забравих да кажа- без това решение моля, в което се използва Reverse() на думата, защото интервюиращия може да не го приеме.
using System;
using System.Text.RegularExpressions;
using System.Collections.Generic;
using System.Linq;
namespace Palindromes
{
class Program
{
static void Main(string[] args)
{
string input=Console.ReadLine();
var list = new List<string>();
Regex regexForWord = new Regex(@"[a-zA-Z]+");
MatchCollection words = regexForWord.Matches(input);
foreach (Match match in words)
{
string currentWord = match.Value;
char [] reverse =currentWord.Reverse().ToArray();
string reverseCurrentWord = (string.Join("", reverse)).ToString();
if (currentWord == reverseCurrentWord)
{
list.Add(currentWord);
}
}
Console.WriteLine(string.Join(", ",list));
}
}
}