私は現在、この正規表現を使用して、PRE_という接頭辞を持つ単語全体を取得しています。
\b(PRE_)\S*
これはほとんどの場合にうまく機能しますが、ピリオド、カンマ、その他の特殊文字 . , ; - { } ( ) [ ] など、特殊文字が単語の一部になっているケースを処理したいと思います。
たとえば、次の単語:
PRE_samplewordwithoutdelimiter
PRE_sampleword.otherwordsnotincluded;
PRE_Sampleword{}...deleted
PRE_complexword()a.;.is deleted
Somewords ahead PRE_sometext() ending in other words
Words with bracket [PRE_brackettext] are deleted
PRE_sampleword is spaced out so deleted
sampleword.PRE_deleted;
notdeleted.notdeleted.PRE_
区切られた単語の最初の部分だけを見つけたいので、単語を削除したり置き換えたりすることができます。したがって、このシナリオですべての PRE_ 接頭辞付き単語をテキストとして "" に置き換えると、次のようになります。
<DELETED>
<DELETED>.otherwordsnotincluded;
<DELETED>{}...deleted
<DELETED>()a.;.is deleted
Somewords ahead <DELETED>() ending in other words
Words with bracket [<DELETED>] are deleted
<DELETED> is spaced out so deleted
sampleword.<DELETED>;
notdeleted.notdeleted.<DELETED>
さまざまな正規表現を試してみましたが、サンプル全体で完全に一致するものはありませんでした。次のようなものは機能しません。
\b(PRE_)\S*(?:[;]|[.][-])$
ご協力いただければ幸いです。
答え1
方法1
\S
最初の正規表現の の後には、スペース以外の文字をすべて含めるのではなくPRE_
、検索で「区切り文字以外の文字」をすべて指定するだけで十分です。
\S
を に置き換えると、次の例がすべて機能します[A-Za-z]
。
\bPRE_[A-Za-z]*
-
数字、ハイフン ( )、アンダースコア ( )を含める場合は、_
代わりに以下を使用できます。
\bPRE_[-A-Za-z0-9_]*
方法2
\S
それ以外の場合は、 を「 以外の文字と、、、、、、、\s
などの他の区切り文字(および必要に応じて他の文字) 」に変更します。その場合、正規表現は次のようになります。.
,
;
{
}
(
)
[
]
\bPRE_[^.;,{}()[\]\s]*
このフレーズは、[^blahblah]
blahblah 以外の任意の文字を意味します。