「ピリオド・カンマ入り数値+行末」のテキストを正規表現で取得

下記テキストの太字部分の数値、及び情報(ZZの文字列存在有無)を取得したいと考えております。

テキスト1:
Sample Test 123,456.78 987,654.32

テキスト2:
Sample Test 123,456.78 987,654.32ZZ

取得したい数値、及び情報(ZZ)は常に行末にあります。

こちらの部分を取得するために、現在下記の正規表現を用いて、取得を試みました。

①「ピリオド・カンマ入り数値+行末」の文字列で正規表現検索
以下の正規表現で検索。
\d+([.,]\d+)※+(ZZ)※+(?=\r\n)

「ピリオド、カンマがない数値の場合がある」「ZZという文字列がある場合とない場合がある」ことから、0回以上の繰り返しを表すアスタリスク(文中では表現できなかったため、※にしております)を加えました。

しかし、こちらの正規表現ではMatchアクティビティにおいて、以下のエラーが発生しました。
Matches: parsing "\d+([.,]\d+)*+(?=\r\n) " - Nested quantifier +.

②右から左に、「行末とスペースの間の文字列」で正規表現検索
MatchアクティビティのOptionのRightToLeftをOnにして、以下の正規表現を検索。
(?=\r\n) (.+)\s

しかし、こちらの正規表現ではMatchアクティビティにおいて、以下のエラーが発生しました。
Message Box: Object reference not set to an instance of an object.

③検索対象文字列のカンマとピリオドを除去し、「空白と行末の間の文字列」で正規表現検索
Replaseメソッドで、カンマとピリオドを全て除去し、以下の正規表現を検索。
\s+(\w+)

こちらの方法では、目的の文字列を全て取得することが出来ましたが、
カンマとピリオドを再度振り直す必要が出てくるため、あまり取りたくない手法です。

①、②の手法はどこか間違えているのでしょうか。
よろしくお願い致します。

※なお、以下の点も気になっております。問題解決には必要ありませんが、併せてご教示いただけますと幸いです。

”Sample"という文字列から改行部分まで取る正規表現について

Sample(.+)(?=\r\n)
は機能するが
Sample(.+)(?=$)
は機能しない

Studio 2021.10.0 - 10/12/2021
Community License
Per-user Installation

License Provider: Internal
Activation ID: UIP-0b31735028

Update Channel: Stable

Microsoft Windows 10 Pro 64-bit
5.0.10

こんにちは

以下でお試しください

mc = System.Text.RegularExpressions.Regex.Matches(yourString,"[.,\d]+(ZZ)?$",System.Text.RegularExpressions.RegexOptions.Multiline)

mcはMatchCollectionです。

1 Like

ちなみに

1は量指定子である * と +が重なっていますので、正規表現として正しくないです。+の意図が良く読み取れません。

2はRightToLeftオプションは右から左に検索をかけますが、パターン表現を右から左にする必要はありません。

”Sample"という文字列から改行部分まで取る正規表現について

Sample(.+)(?=\r\n)
は機能するが
Sample(.+)(?=$)
は機能しない

先ほどのPOSTで上げた式の様にMultilineオプションを指定すると行末までとして機能すると思います。
これがない場合は、文字列終端を意味しますので、途中に\nがあると、マッチするものなしと
なります。

ありがとうございます。
ご教示頂いた式で、目的の文字列(ZZ含む)を取得することが出来ました。

1は量指定子である * と +が重なっていますので、正規表現として正しくないです。+の意図が良く読み取れません。

2はRightToLeftオプションは右から左に検索をかけますが、パターン表現を右から左にする必要はありません。

誤り部分のご指摘ありがとうございます。

先ほどのPOSTで上げた式の様にMultilineオプションを指定すると行末までとして機能すると思います。
これがない場合は、文字列終端を意味しますので、途中に\nがあると、マッチするものなしと
なります。

こちらについては、これから勉強したいと思います。

ご教示ありがとうございました。

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.