저는 정규식을 처음 사용했으며 비 캡처 그룹으로 구문 분석 할 특정 데이터 범위를 지정하고 캡처 그룹으로 해당 데이터를 필터링하는 방법에 대해 정말 고심하고 있습니다.
특히 Invoice2Data를 사용하여 pdf 송장을 구문 분석하고 내 구문 분석 템플릿에 대한 yaml 파일을 설정해야합니다. yaml 파일은 regex를 사용하여 invoice2data에 대한 구문 분석 템플릿을 설정합니다.
예를 들어 청구서가 있다고 가정합니다. 페이지에 여러 이메일 주소가 있지만 'Invoice for'다음에 오는 이메일 만 캡처하고 싶습니다.
Invoice for
John Doe
555 Nowhere Ave
[email protected]
555.555.5555
다음과 같이이 줄만 캡처 할 수 있다는 것을 알고 있습니다 (?i)For\s(?:^(?:.*\n){4})
.
John Doe
555 Nowhere Ave
[email protected]
555.555.5555
문제는 예를 들어이 비 캡처 그룹을 구문 분석하여 이메일 만 캡처하는 방법을 모른다는 것입니다. 이메일을 찾기 위해이 정규식이 ([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)
있지만 자체적으로 인보이스의 모든 이메일이 포함됩니다. 또 다른 문제는 모든 송장에 주소가있는 것은 아니므로 송장에 따라 실제 라인 번호가 다를 수 있다는 것입니다.
어떻게 혼합 않습니다 (?i)For\s(?:^(?:.*\n){4})
및 ([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)
전용 송장의 특정 섹션에서 이메일을 끌어?
부정적 미리보기를 사용하기 위해 Invoice for
패턴 또는 |
송장 과 같은 이메일 주소로 시작하지 않는 모든 행이 뒤에 일치하는 패턴을 사용할 수 있습니다.(?!
Invoice for
미리보기에서 확인 하면 이메일 주소가 선택 사항 일 수 있으므로 이메일 주소가 잘못된 인보이스와 일치하는 것을 방지합니다.
그런 다음 특정 패턴을 사용하여 그룹 1 에서 이메일 주소를 캡처 합니다.
^Invoice for(?:\r?\n(?![^\s@]+@[^\s@]|Invoice for\b).*)*\r?\n([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)
또는 부정적인 예견에서도 전체 이메일 패턴을 사용합니다.
^Invoice for(?:\r?\n(?![a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]|Invoice for\b).*)*\r?\n([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다