У меня есть файл, похожий на:
maar beroepsmensen
p( maar | <s> ) = 0.005859305 [ -2.232154 ]
p( beroepsmensen | maar ...) = 7.865118e-06 [ -5.104295 ] # <- first match: 7.865118e-06
p( kunnen | beroepsmensen ...) = 6.842439e-08 [ -5.104295 ]
p( </s> | kunnen ...) = 0.04018713 [ -1.395913 ]
1 sentences, 2 words, 0 OOVs
0 zeroprobs, logprob= -8.732362 ppl= 814.3052 ppl1= 23237.04
dan scootermobiel
p( dan | <s> ) = 0.005859305 [ -2.232154 ]
p( scootermobiel | dan) = 0.827746 [ -9.106363 ] # <- second match: 0.827746
p( he | scootermobiel) = 0.2520393 [ -3.123365 ]
p( </s> | he ...) = 0.04499642 [ -1.346822 ]
1 sentences, 2 words, 0 OOVs
и список с некоторым словом, например, mylst = ['beroepsmensen', 'scootermobiel']
.
Я хочу просмотреть список * l oop и найти первый номер в строке с рисунком p( ithwordfromlist | anotherword ) = 9.999999999
. (Пожалуйста, смотрите выше для матчей, касающихся игрушечного примера). Обратите внимание, что другое слово после |
может быть заменено тремя точками, и что число иногда состоит из структуры e-
.
До сих пор мне удалось написать регулярное выражение, которое находит все числа перед [
с необязательным .
и необязательным e-
, использующим положительный прогноз:
\d+(\.\d+)?(e-\d+)?(?=( )+\[) #the number of spaces after the number can vary too.
Однако мне не удалось написать положительный взгляд, который соответствует шаблон перед номером. Например, при просмотре в виде, подобном (?<=\=( )+)
, выдается ошибка Квантификатор внутри просмотра делает его нефиксированной шириной . (Возможно, использование lookbehind - не лучший подход, поэтому, пожалуйста, не стесняйтесь предлагать и другие решения.)
До сих пор я разбивал длинный файл на список строк и применял регулярные выражения к каждому элемент в этом списке. Тем не менее, я мог бы, конечно, также применить его во всем списке, если это будет быстрее. Поэтому, если у вас есть решения для обоих подходов, пожалуйста, дайте мне знать, тогда я сравню время выполнения. Thx !!!
Редактировать: вставить новые строки, которые начинаются со структуры p( word1 | word2 )
и не должны совпадать
Редактировать2: сделать вопрос более конкретным