42

テキストに次のパターンがある場合:

def articleContent =  "<![CDATA[ Hellow World ]]>"

「Hellow World」部分を抽出したいので、次のコードを使用して一致させます。

def contentRegex = "<![CDATA[ /(.)*/ ]]>"
def contentMatcher = ( articleContent =~ contentRegex )
println contentMatcher[0]

ただし、正規表現が機能していないように見えるため、ヌルポインター例外が発生し続けます。「テキストの平和」の正しい正規表現は何ですか?文字列からそれを収集する方法は?

4

5 に答える 5

64

試す:

def result = (articleContent =~ /<!\[CDATA\[(.+)]]>/)[ 0 ]​[ 1 ]

ただし、xml を正規表現で解析する予定があるのではないかと心配しています。この cdata がより大きな有効な xml ドキュメントの一部である場合は、xml パーサーを使用することをお勧めします

于 2013-07-08T22:33:23.827 に答える
2

パーティーには少し遅れますが、パターンを定義するときにバックスラッシュを使用してみてください。例:

 def articleContent =  "real groovy"
 def matches = (articleContent =~ /gr\w{4}/) //grabs 'gr' and its following 4 chars
 def firstmatch = matches[0]  //firstmatch would be 'groovy'

あなたは正しい軌道に乗っていました。変更する必要があったのはパターン定義だけでした。

参考文献:

https://www.regular-expressions.info/groovy.html

http://mrhaki.blogspot.com/2009/09/groovy-goodness-matchers-for-regular.html

于 2019-02-25T22:24:07.123 に答える
0

私の場合、実際の文字列は以下のように複数行でした

ID : AB-223
Product : Standard Profile
Start Date : 2020-11-19 00:00:00
Subscription : Annual
Volume : 11
Page URL : null
Commitment : 1200.00
Start Date : 2020-11-25 00:00:00

この文字列から値を抽出したかったStart Dateので、スクリプトは次のようになります

def matches = (originalData =~ /(?<=Actual Start Date :).*/)
def extractedData = matches[0]

この正規表現は、プレフィックスが一致する各行から文字列コンテンツを抽出しますStart Date :

私の場合、結果は2020-11-25 00:00:00

注:あなたoriginalDataが複数行の文字列の場合、groovyでは次のように含めることができます

def originalData = 
"""
ID : AB-223
Product : Standard Profile
Start Date : 2020-11-19 00:00:00
Subscription : Annual
Volume : 11
Page URL : null
Commitment : 1200.00
Start Date : 2020-11-25 00:00:00
"""

このスクリプトは単純に見えますが、いくつかのことを理解するのに時間がかかったので、ここに投稿します。

于 2021-10-14T14:19:27.570 に答える