\ @를 사용하여 부정 된 패턴을 반복 할 수 없습니다!
이 텍스트가 있습니다.
```파이썬 x = 1 ```
기본적으로 파이썬 셀을 마크 다운합니다. 커서를 둘러싼 셀의 내용을 추출하고 싶습니다.
이미 짐작 하셨겠지만, 저는 jupyter 워크 플로우를 구축하려고하고 , 콘솔에 jupytex 와 vim-slime를 사용하고, 콘솔에 셀을 보내고 싶습니다.
현재 저는 정규식과 셀을 일치시키는 데 어려움을 겪고 있습니다.
/```python\(\(```\)\@!\)*```
이것은```python으로 시작하는 문자열과 일치해야하고, 삼중 따옴표를 제외한 모든 것, 그리고 삼중 따옴표와 일치해야하지만 그렇지 않습니다.
이상하게도 이것은 (끝 세 개의 따옴표없이 :
/```python\(\(```\)\@!\)*
```python을 강조하지만 더 이상은 없습니다.
그렇다면 파이썬 셀과 일치하는 정규식은 무엇입니까? 커서 아래에있는 셀의 내용과 일치하는 정규식에 대한 보너스!
답변
이것은```python으로 시작하는 문자열과 일치해야하고, 삼중 따옴표를 제외한 모든 것, 그리고 삼중 따옴표와 일치해야하지만 그렇지 않습니다.
*
멀티가 어떤 문자도 반복하지 않기 때문입니다 . 전체 일치에 아무것도 추가하지 않는 부정적인 예측을 반복합니다. 정규식 엔진은 닫는 삼중 백틱에 도달 할 수 없습니다.
/```python\(\(```\)\@!\)*```
^--------^
✘
내부에 문자 추가 :
/```python\(\(```\)\@!\_.\)*```
^-^
그 주 \_.
줄 바꿈을 포함한 모든 문자를 일치시킬 수 있습니다; 반대로 .
개행과 일치 할 수 없습니다. 을 참조하십시오 :h /\_.
그렇다면 파이썬 셀과 일치하는 정규식은 무엇입니까? 커서 아래에있는 셀의 내용과 일치하는 정규식에 대한 보너스!
이 시도:
```python\n\%(\%(```\)\@!\_.\)*\%#\_.\{-}\n```\n
├─┘ ├──┘
│ └ as few as possible
└ the cursor position must match here
:h /\%#및을 참조하십시오 :h /\{-.
나는 그 고급 정규식을 이해하지 못하지만 이것은해야합니다.
^```python\_$\_.\{-}\_^```$
그것을 이해하려면 다음을 :help ordinary_atom
안내하십시오.
\_$
줄 끝과 일치합니다.\_.
줄 끝을 포함하여 모든 문자와 일치합니다.\_^
줄 시작과 일치합니다.
그리고 :help non-greedy
,
\{-}
와 동일*
하지만 최단 일치 우선 알고리즘을 사용합니다.\_.
우리의 경우 이전 요소에만 적용된다는 것을 기억하십시오 .
정규식을 약간 완화하여 ^
및 $
고정을 제거 할 수 있습니다.
이 샘플에서 테스트 한 정규식은 파이썬 셀과 만 일치합니다.
This is Python:
```python
for i in range(10):
print(i)
```
This is FORTRAN:
```fortran
DO I=1,10
WRITE(*,*)I
ENDDO
```
This is Python again
```python
for i in range(10):
print('```')
```