Я ищу шаблон регулярного выражения, который вернет мне содержимое первого набора скобок в строке.
Например,
text text text text (hello) text (hello2) (hello3) text
вернет "hello"
Кто-нибудь знает, как выглядит шаблон для С#?
Я ищу шаблон регулярного выражения, который вернет мне содержимое первого набора скобок в строке.
Например,
text text text text (hello) text (hello2) (hello3) text
вернет "hello"
Кто-нибудь знает, как выглядит шаблон для С#?
Образец regexp будет выглядеть примерно так:
\(([^)]*)\)
Вскрытие вскрытия:
\(
- буква "(
"
(
- начало подшаблона:
[^)]*
соответствует 0 или более символам, которые не являются ")
" - обратите внимание: мы определяем группу символов, поэтому нам не нужно скрывать символ )
.
)
- конец подшаблона
\)
- буква ")
"
Полный шаблон будет соответствовать скобкам и тексту внутри них, первый подшаблон будет соответствовать только тексту внутри скобок (см. ссылку на С#, как их получить - я не говорю С#;))
Это вернет вам только то, что находится в первом наборе скобок:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace Test
{
class Program
{
static void Main(string[] args)
{
Match match = Regex.Match("foo bar (first) foo bar (second) foo", @"\((.*?)\)");
if (match.Groups.Count > 1)
{
string value = match.Groups[1].Value;
System.Console.WriteLine(value);
}
}
}
}
Bare regex:
\((.*?)\)
В Python вы можете использовать его следующим образом:
import re
rx = re.compile(r'\((.*?)\)')
s = 'text text text text (hello) text (hello2) (hello3) text'
rxx = rx.search(s)
if rxx:
print(rxx.group(1))
Если строки относительно невелики, вместо замены можно использовать замену:
string s = Regex.Replace("text text text text (hello) text (hello2) (hello3) text", @"^.*?\(([^)]*)\).*$", "$1");