/ / Wyrażenie Regex, aby dopasować całe słowo ze znakami specjalnymi, które nie działają? - c #, .net, regex, escaping, dopasowywanie wzorców

Wyrażenie Regex, aby dopasować całe słowo ze znakami specjalnymi, które nie działają? - c #, .net, regex, escaping, dopasowywanie wzorców

Przejrzałem to pytanie C #, Regex.Match całe wyrazy

Mówi o dopasowaniu całego słowa "bpatternb" Działa to dobrze, aby dopasować całe słowo bez żadnych znaków specjalnych, ponieważ jest przeznaczone tylko dla znaków słownych!

Potrzebuję również wyrażenia, aby dopasować słowa do znaków specjalnych. Mój kod jest następujący

class Program
{
static void Main(string[] args)
{
string str = Regex.Escape("Hi temp% dkfsfdf hi");
string pattern = Regex.Escape("temp%");
var matches = Regex.Matches(str, "\b" + pattern + "\b" , RegexOptions.IgnoreCase);
int count = matches.Count;
}
}

Ale zawiedzie z powodu%. Czy mamy jakieś obejście tego problemu? Mogą istnieć inne znaki specjalne, takie jak "spacja", "(", ")" itp

Odpowiedzi:

5 dla odpowiedzi № 1

Jeśli masz znaki bez słów, nie możesz ich użyć b. Możesz użyć następujących

@"(?<=^|s)" + pattern + @"(?=s|$)"

Edytować: Jak wspomniał Tim w komentarzach, twoje regex zawodzi właśnie dlatego, że b nie pasuje do granicy między % i biała przestrzeń obok niej, ponieważ obie są znakami innymi niż słowa. b dopasowuje tylko granicę między słowem a nie-słowem.

Zobacz więcej na temat granic słów tutaj.

Wyjaśnienie

@"
(?<=        # Assert that the regex below can be matched, with the match ending at this position (positive lookbehind)
# Match either the regular expression below (attempting the next alternative only if this one fails)
^           # Assert position at the beginning of the string
|           # Or match regular expression number 2 below (the entire group fails if this one fails to match)
s          # Match a single character that is a “whitespace character” (spaces, tabs, and line breaks)
)
temp%       # Match the characters “temp%” literally
(?=         # Assert that the regex below can be matched, starting at this position (positive lookahead)
# Match either the regular expression below (attempting the next alternative only if this one fails)
s          # Match a single character that is a “whitespace character” (spaces, tabs, and line breaks)
|           # Or match regular expression number 2 below (the entire group fails if this one fails to match)
$           # Assert position at the end of the string (or before the line break at the end of the string, if any)
)
"

3 dla odpowiedzi № 2

Jeśli wzorzec może zawierać znaki specjalne dla Regex, przeprowadź je Regex.Escape pierwszy.

Zrobiłeś to, ale zrób nie uciec od szukanego ciągu - tego nie potrzebujesz.


1 dla odpowiedzi nr 3
output = Regex.Replace(output, "(?<!w)-w+", "")
output = Regex.Replace(output, " -"".*?""", "")

0 dla odpowiedzi nr 4

Odpowiedź na to pytanie można znaleźć tutaj

Wyrażenie Regex, aby dopasować całe słowo

Dzięki za wszystkie odpowiedzi!