
문장에서 DOI와 같은 문자열을 찾아 그 결과를 셀에 추출하고 싶습니다. 나는 LibreOffice Calc(현재 버전 6.2.4.2)에서 내가 원하는 것을 정확히 수행할 것이라고 알려주는 »regex« 함수를 발견했습니다.
예:
푸 바르 도이: 10.1016/j.cmpb.2018.09.006 baar foooo
Python의 내 정규식은 다음과 같습니다.
\b(10[.][0-9]{4,}(?:[.][0-9]+)*\/(?:(?![\"&\'<>])\S)+)\b
Python 스크립트에서 나에게 잘 맞습니다(의도된 »doi« 문자열 없이 doi 번호와 정확히 일치합니다).
그러나 »regex« 함수는 이 정규식을 거부합니다. 문서에는 내 정규식과 비교하여 어떤 문제도 찾을 수 없는 ICU Regex Expressions가 언급되어 있습니다.
뭔가 그리워요? LibreOffice에 어떤 »regex 방언″을 적용할 수 있습니까?
답변1
목록에는정규 표현식LibreOffice에서 지원하면 대부분의 표준 표현식이 지원되지만 사용하는 두 가지 요소가 누락되었습니다.
?:
비캡처 그룹에 대한 사용 ;?!
부정적인 예견을 위해 사용 .1 1 2 | | | v v v \b(10[.][0-9]{4,}(?:[.][0-9]+)*/(?:(?!["&'<>])\S)+)\b
이것이 나타내는 RE 수준이 무엇인지는 모르지만(추가 사항이 있는 BRE인 것 같습니다) 이는 RE가 테스트 문자열과 일치하지 않음을 의미합니다.
문자열 중 얼마나 많은 부분이 분리하려는 숫자를 구성하는지 명확하지 않으므로 지원되지 않는 요소를 피할 수 있는 방법을 제안할 수는 없지만 다음과 같은 몇 가지 가능성이 있습니다.
doi:
과 사이에 숫자 문자열이 필요한 경우/
더 간단한 방법\b10[.][0-9]{4,}(?:[.][0-9]+)*
으로 충분합니다.doi:
와 다음 공백 사이의 모든 내용이 필요한 경우 를 사용할 수 있습니다\b10[.][0-9]{4,}(?:[.][0-9]+)*[^\s]*
.
(이 두 번째 경우는 RE와 동일한 일치를 제공합니다.RegExr.)
귀하의 실시간 데이터에는 포착해야 할 예외가 더 많이 있을 수 있다는 것을 알고 있지만 귀하의 데이터와 일치시키려는 숫자에 대한 완전한 지식이 없으면 더 이상 할 수 없습니다.