LibreOffice Calc »regex« 함수 – 어떤 정규식 형식을 적용할 수 있습니까?

LibreOffice Calc »regex« 함수 – 어떤 정규식 형식을 적용할 수 있습니까?

문장에서 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. ?:비캡처 그룹에 대한 사용 ;
  2. ?!부정적인 예견을 위해 사용 .

                      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.)

귀하의 실시간 데이터에는 포착해야 할 예외가 더 많이 있을 수 있다는 것을 알고 있지만 귀하의 데이터와 일치시키려는 숫자에 대한 완전한 지식이 없으면 더 이상 할 수 없습니다.

관련 정보