0

ここに同様の「2つの正規表現を組み合わせる」投稿がたくさんあることは知っていますが、解決策を試してみましたが、エラーが発生し続けています。

次のような説明を解析するための正規表現があります。

Org Biomol Chem. 2011 May 7;9(9):3549-59. doi: 10.1039/c1ob05128h. Epub 2011 Mar 28.

DOI (デジタル オブジェクト識別子) を抽出するには:

  1. ([^:]+$)--> 10.1039/c1ob05128h. Epub 2011 年 3 月 28 日。
  2. ([^\s]+)--> 10.1039/c1ob05128h.

しかし、これらを組み合わせる方法についてはかなり無知です。難しい場合は必要ありませんが、計算が簡単になります。

また、最後の「。」を取り除く方法もわかりません。これは DOI 文字列の一部ではありません (記録としては、DOI に 2 つ以上のピリオドが存在する可能性があるため、正規表現は単に「2 番目のピリオドの後」になることはできません)。

要求されたその他の例:

Chem Soc Rev. 2008 Nov;37(11):2413-21. doi: 10.1039/b719548f. Epub 2008 Sep 16.
Small. 2010 Dec 20;6(24):2796-820. doi: 10.1002/smll.201001881. Review.
Org Lett. 2010 Oct 1;12(19):4248-51. doi: 10.1021/ol101920b.
Chemistry. 2010 Dec 27;16(48):14285-9. doi: 10.1002/chem.201002111. No abstract available. 

これまでに行ったすべての試みは、これとほぼ同じ結果をもたらします。

ここに画像の説明を入力

理由は不明ですが、「doi: ([^\s]+).? ([^:]+).?」というデューケリングの提案に対する例外のいくつかは次のとおりです。

  • Chem Commun (カム)。2012 年 12 月 25 日;48(99):12094-6。ドイ: 10.1039/c2cc35588d.
  • Org Biomol Chem。2013 年 1 月 7 日;11(1):27-30。ドイ: 10.1039/c2ob26587g.
  • Chem Commun (カム)。2013 年 1 月 25 日;49(7):671-3。ドイ: 10.1039/c2cc37953h.
  • オルグレット。2010 年 10 月 1 日;12(19):4248-51。doi: 10.1021/ol101920b.化学。2010 年 7 月 26 日;16(28):8537-44。ドイ: 10.1002/chem.201000773.
  • Chem Commun (カム)。2012 年 12 月 25 日;48(99):12094-6。ドイ: 10.1039/c2cc35588d.
  • Org Biomol Chem。2013 年 1 月 7 日;11(1):27-30。ドイ: 10.1039/c2ob26587g.
  • Chem Commun (カム)。2013 年 1 月 25 日;49(7):671-3。ドイ: 10.1039/c2cc37953h.
  • オルグレット。2010 年 10 月 1 日;12(19):4248-51。ドイ: 10.1021/ol101920b.
  • 化学。2010 年 7 月 26 日;16(28):8537-44。ドイ: 10.1002/chem.201000773.
4

3 に答える 3

2

あなただけが欲しいなら.、これはうまくいくようです:

"doi: ([^\s]+)\."

つまり、括弧の外側に置くだけ.なので、文字列とグループ化されません。

10.1039/c1ob05128hEpub 2011 Mar 28を 2 つの別々の文字列に抽出したい場合は、 groupsでこれを行うことができます。次のような正規表現を作成できます。

"doi: ([^\s]+)\.(?: ([^:]+)\.)?"

2番目の部分がオプションのように見える場合、オプションとしてマークする括弧で囲む必要があります?(そして、?:それを非キャプチャグループにするため、必要なものではなく2番目のセルでそれを取得できません)。

Google は次のセルに自動的に入力するよう=CONTINUE(..., 1, 2)で、2 つのグループが隣り合って表示されます。

.をオプションにする追求

最初は とだけ言ってみまし\.?たが、明らかに[^\s]+は を消費します.(これは望ましくありません)。

したがって、これを防ぐには、括弧内に何かを含める必要があります。具体的には、最後の文字をチェックして、. でないことを確認する必要があります.

これにより、次のことがわかりました。

"doi: ([^\s]*[^.\s])\.?(?: ([^:]*[^.:])\.?)?"

これにより、オプション.の 's が許可されますが、最後に 1 つ以上ある場合.は機能しません。出力にこれらのどれも必要ないと仮定すると、\.?to を変更することで簡単に修正でき\.*ます。

"doi: ([^\s]*[^.\s])\.*(?: ([^:]*[^.:])\.*)?"
于 2013-10-02T14:19:44.900 に答える
0
=REGEXEXTRACT(cell;"doi: ([.\d]+\/[\w\.]+)\.(?: |$)")

--> 10.1039/c1ob05128h を抽出
正規表現を組み合わせる必要がなく、一気にできます。

あなたのすべての例で試してみましたが、うまくいきます。

于 2013-10-02T13:53:52.317 に答える