Пример строки:
[fun-stuff-thats-fun-goes-here] dumbstuffidontwantishere\
Мне нужна строка между скобками, но я хочу свести на нет скобки.
Regex, который я пробовал:
[^\[]*[\]]
Это производит:
fun-stuff-thats-fun-goes-here]
Именно то, что вы ожидаете. Но если я отрицаю последнее совпадение с помощью:
[^\[]*[^\]]
каким-то образом я все это улавливаю.
[fun-stuff-thats-fun-goes-here] dumbstuffidontwantishere\
я просто хочу, чтобы результат был:
fun-stuff-thats-fun-goes-here
Я попробовал все, что имело для меня смысл. Пожалуйста помоги.
Попробуйте: (?<=\[)[^]]+(?=])
@user24714692 user24714692 - не сработало, фиксирует скобки. Я тестирую на regexr.com, но скрипт, который я пытаюсь использовать, - это powershell.
@anubhava не сработало. Ничего не фиксирует
@JustinBeagley, как насчет использования ^|(?<=\[)[^\]]*(?=\])
? написано и протестировано только с показанными образцами.
Вы можете использовать:
$text = "[fun-stuff-thats-fun-goes-here] dumbstuffidontwantishere"
$pattern = "\[([^\]]*)\]"
if ($text -match $pattern) {
$matches[1]
}
fun-stuff-thats-fun-goes-here
или вы можете использовать тот, что в комментарии:
(?<=\[)[^]]+(?=])
– анубхава$text = "[fun-stuff-thats-fun-goes-here] dumbstuffidontwantishere"
$pattern = "(?<=\[)[^]]*(?=])"
if ($text -match $pattern) {
$matches[0]
}
Значит, будет две спички, и ты просто возьмешь вторую, да?
@JustinBeagley Да, тот, что в группе.
@JustinBeagley Обновлено. Другой шаблон в комментарии к вопросу также работает.
Нашел ответ здесь - любые другие идеи были бы замечательными, но это сработало для меня.
Regex Сопоставить все символы между двумя строками
(?<=[)(.*)(?=])
Когда дело доходит до извлечения значений из строки посредством сопоставления регулярных выражений, кратким решением является использование оператора PowerShell -replace для сопоставления всей входной строки и замены ее интересующей подстрокой:
# -> 'fun-stuff-thats-fun-goes-here'
'[fun-stuff-thats-fun-goes-here] dumbstuff...' -replace '\[(.+?)\].*', '$1'
(...)
создает группу захвата, на которую в выражении замены можно ссылаться как $1
(первая и единственная группа захвата).
.+?
лениво (?
) захватывает любую непустую серию (+
) символов (.
), следующих за [
и до следующего ]
, и .*
сопоставляет все, что идет после, тем самым сопоставляя всю строку, так что фактически только то, что соответствует группе захвата, является вернулся.
Попробуйте:
\[([^\]]*)\]
. Это для Java (\\[([^\\]]*)\\]
)?