Как мне прекратить мой паттерн при разрыве строки? - PullRequest
0 голосов
/ 28 октября 2019

У меня длинный символ из файла PDF, который я хочу обработать. У меня есть повторяющиеся случаи Table X. Name of the table, за которыми в моем персонаже всегда следует \r\n

Однако, когда я пытаюсь извлечь все таблицы из списка, используя List_Tables <-str_extract_all(Plain_Text, "Table\\s+\\d+\\.\\s+(([A-z]|\\s))+\\r\\n"), я частодругая строка, которая все еще находится в моем извлечении, например,

> List_Tables
[[1]]
 [1] "Table 1. Real GDP\r\n                                                           Percentage changes\r\n"                                                                    
 [2] "Table 2. Nominal GDP\r\n                                          Percentage changes\r\n"    

Что я пропустил в своем коде?

1 Ответ

2 голосов
/ 28 октября 2019

\s соответствует всем пробелам, включая разрывы строк! В сочетании с жадным квантификатором + это означает, что (([A-z]|\\s))+ соответствует, в вашем первом примере,

 Real GDP\r\n       […]       Percentage changes\r\n

Самый простой способ исправить это - использовать не жадный квантификатор: т.е. +? вместо +.

Просто для полноты я упомяну, что есть альтернативы, но они получаютболее сложныйНапример, вы можете использовать отрицательные утверждения, чтобы включить тест «если» для сопоставления пробела, который не является символом разрыва строки;или вы можете использовать класс символов [ \t] вместо \s, который является более ограничительным, но также более явным и, вероятно, ближе к тому, что вы хотите.

...