#regex #stata
#регулярное выражение #stata
Вопрос:
Я пытаюсь сопоставить несколько вхождений одного и того же шаблона в строке. К сожалению, использование ustrregexs
и ustrregexm
возвращает только первое совпадение. Кроме того, я не знаю, сколько совпадений может быть, поэтому жесткие соответствия кодированию n
не подходят. Есть ли способ найти все совпадения в Stata?
Пример:
clear all
input x str250 y
1 "123 12"
2 "345 678"
3 "000 000 000"
4 "111"
5 "00"
6 "000 000 000000 000 000000 000 000000 000 000000 000 000000 000 000000 000 000000 000 000000 000 000000 000 000000 000 000000 000 000000 000 000000 000 000000 000 000000 000 000000 000 000000 000 000000 000 000000 000 000"
end
* Returns only the first match
gen match = ustrregexs(0) if ustrregexm(y, "(d{3}) ")
Ответ №1:
moss
from SSC посвящен именно этому вопросу. Если «изначально» исключает команды, внесенные сообществом, тогда вам нужно написать свой собственный код.
clear all
input x str20 y
1 "123 12"
2 "345 678"
3 "000 000 000"
4 "111"
5 "00"
end
moss y, match("([0-9][0-9][0-9])") regex
list
--------------------------------------------------------------------------------
| x y _count _match1 _pos1 _match2 _pos2 _match3 _pos3 |
|--------------------------------------------------------------------------------|
1. | 1 123 12 1 123 1 . . |
2. | 2 345 678 2 345 1 678 5 . |
3. | 3 000 000 000 3 000 1 000 5 000 9 |
4. | 4 111 1 111 1 . . |
5. | 5 00 0 . . . |
--------------------------------------------------------------------------------