Регулярное выражение для соответствия строки между круглыми и круглыми скобками, но с несколькими круглыми скобками - PullRequest
1 голос
/ 19 февраля 2020

Я пытаюсь использовать регулярное выражение для сопоставления строк (которые представляют собой названия видов + коды, например, diadema1479) в дереве филогенизации c в скобках, но мне не удается справиться со всеми скобками.

Вот пример моих данных

(diadema1479:0.20268621848058304691,longipes1483:0.18941326141716441356):0.05754190478991345892,((sp1_11269:0.08954446656323425402,(davidovi11375:0.12866818058352805232):0.02407442773179632040):0.11326732171695803875,(((S_willeyi:0.16019503647856672690,(((((S_sp2:0.13155607959902493320,S_sp3:0.04602288122852762897):0.09795419683476988548,S_sp4:0.03464730266968370220):0.06696262102745857703,S_sp5_Lombok:0.00000100000050002909):0.01699644302538915949,((S_javensis:0.12205647213742974733,(S_sp6:0.07046365005123975123,((yayukae12168:0.01496242382530112158,(yayukae12109:0.01287526689678352571...

Когда я использую:

/(?<=\()[^:]+/g

Соответствует, например, 'diadema1479' и 'davidovi11375', но включает все дополнительные скобка в '((((S_sp2'. Как мне установить его, чтобы он вообще не совпадал с скобками?

Спасибо!

Ответы [ 3 ]

1 голос
/ 19 февраля 2020

Просто добавьте ( в класс символов:

(?<=\()[^(:]+
//     __^

Демонстрация и объяснение

1 голос
/ 19 февраля 2020

Это будет работать:

(?<=[(,])[^(:]+
  • (?<=[(,]) - убедитесь, что предыдущий символ является открытой скобкой или запятой
  • [^(:]+ - соответствует всем, что не является открывающая скобка без двоеточия

https://regex101.com/r/8Yocnm/1

0 голосов
/ 19 февраля 2020

Вот альтернатива: (\w+):. В вашем примере это выглядит так, как будто вы пытаетесь получить имена пользователей или что-то еще, после a (и перед a:. \w+ находит символы "слова", а : позволяет исключить последующее число с плавающей запятой.

Кроме того, я никогда не смогу порекомендовать этот сайт для тестирования регулярных выражений: https://regex101.com/

...