2017-05-02 6 views
2

内のコロンのための条件を追加する:は、私は次のようになりますトランスクリプトからテキストを解析しようとしている正規表現

レスター・ホルト(dfjk)(0時01分59秒):ドナルド・トランプさん大統領への道順 は、これまでに見たことのなかで最も珍しく正統性のないものかもしれません。

チーフユースジョーンローバーズ(00:02:06):おめでとう、ミスター 大統領。

(午前0時02分08秒)(群集の歓声と拍手)

私が探している項目は、オプションのスピーカーです[すなわち、 'LESTER HOLT']、続いて括弧内の任意のテキスト[すなわち、 '(vo)']、続いて括弧内の任意のタイムスタンプ[すなわち、 '(00:02:03)']、テキスト[ 'こんにちは、こんにちは。']。 タイムスタンプの後にコロン[':']があってもなくてもかまいません。コロンがない上記の例の最後の行を参照してください。 ([a-zA-Z\s]*?)?\s?(\([\w\s]*?\))?\s?(\(\d\d:\d\d:\d\d\))?\s?:(.*)(?:\n\n|$)

問題は、上記の例の最後の行に発生する:

私は、次の正規表現を使用しています。タイムスタンプの後にコロンがないと、正規表現はタイムスタンプをキャプチャしません。

私の上記の正規表現の実装については、https://regex101.com/r/UZAnmW/4を参照してください。

Here is the desired result, which (with above regex) only happens if there is a colon after timestamp.

答えて

1

この正規表現は役立つかもしれない、それははるかに簡単で、読みやすさと結果へのアクセスを支援するために、オプションという名前のグループを使用しています。

(?<speaker>(?:\w+\s?)+)?(?<paren>\(\w+\)\s?)?(?<timestamp>\(.*?\))?:?(?<text>.+) 

https://regex101.com/r/9MDLFU/4/

また、あなたの正規表現はcouple changesで動作します(少なくとも1つの文字に一致しなければならない最初のグループ、コロンは任意であり、そして最後のグループは、少なくとも1つの文字に一致する必要があります):

([a-zA-Z\s]+)?\s?(\([\w\s]*?\))?\s?(\(\d\d:\d\d:\d\d\))?\s?:?(.+)(?:\n\n|$)

関連する問題