LibreOffice Calc »regex«-Funktion – welches Regex-Format ist anwendbar?

LibreOffice Calc »regex«-Funktion – welches Regex-Format ist anwendbar?

Ich möchte eine Zeichenfolge wie eine DOI in einem Satz finden und das Ergebnis in eine Zelle extrahieren. Ich habe die Funktion »regex« in LibreOffice Calc (aktuelle Version 6.2.4.2) gefunden, die mir sagt, dass sie genau das tun würde, was ich will.

Beispiel:

Foo bar doi: 10.1016/j.cmpb.2018.09.006 baar foooo

Mein regulärer Ausdruck in Python lautet: \b(10[.][0-9]{4,}(?:[.][0-9]+)*\/(?:(?![\"&\'<>])\S)+)\b und passt gut in ein Python-Skript (er stimmt genau mit der DOI-Nummer überein, ohne die Zeichenfolge »doi«, was beabsichtigt ist).

Die Funktion »regex« lehnt diesen regulären Ausdruck jedoch ab. In der Dokumentation wird auf die ICU Regex Expressions verwiesen, bei denen ich beim Vergleich mit meinem regulären Ausdruck keine Probleme feststellen kann.

Übersehe ich etwas? Welcher »Regex-Dialekt« ist für LibreOffice anwendbar?

Antwort1

In der Liste derReguläre Ausdrückevon LibreOffice unterstützt. Die meisten Standardausdrücke werden unterstützt, aber zwei der von Ihnen verwendeten Elemente fehlen:

  1. die Verwendung von ?:für eine nicht erfassende Gruppe;
  2. die Verwendung von ?!für einen negativen Vorausblick.

                      1              1  2
                      |              |  |
                      v              v  v
    \b(10[.][0-9]{4,}(?:[.][0-9]+)*/(?:(?!["&'<>])\S)+)\b
    

Ich weiß nicht, welche RE-Ebene dies darstellt (es scheint BRE mit Zusätzen zu sein), aber es bedeutet, dass Ihr RE nicht mit Ihrer Testzeichenfolge übereinstimmt.

Es ist nicht klar, welcher Anteil Ihrer Zeichenfolge die Zahl ausmacht, die Sie isolieren möchten. Daher kann ich Ihnen nicht vorschlagen, wie Sie die nicht unterstützten Elemente vermeiden können. Dies sind jedoch einige Möglichkeiten:

  • Wenn Sie die numerische Zeichenfolge zwischen doi:und benötigen, reicht /die einfachere Version aus.\b10[.][0-9]{4,}(?:[.][0-9]+)*
  • Wenn Sie alles zwischen doi:und dem nächsten Leerzeichen benötigen, können Sie verwenden \b10[.][0-9]{4,}(?:[.][0-9]+)*[^\s]*.

(Dieser zweite Fall ergibt die gleiche Übereinstimmung wie Ihr RE aufRegExr.)

Mir ist bewusst, dass Ihre Live-Daten möglicherweise weitere Ausnahmen enthalten, die abgefangen werden müssen, aber ohne vollständige Kenntnis Ihrer Daten und der Zahl, die Sie abgleichen möchten, kann ich nicht mehr tun.

verwandte Informationen