0

構文ハイライターで使用する正規表現文字列をいくつか作成しようとしています。これは、初めてそれらを使用したことがあり、かなりの困難を抱えている場合です...

最初の 4 つは、指定された文字の後に任意の数の数字が続き、それに一致します。

  • 私が持っている最善の方法は、、、またはのいずれかに"G[0-9]|G[0-9][0-9]|G[0-9][0-9][0-9]"一致することですG#G##G###

しかし、その後に任意の数の数字で G を実行したいです。

次の 3 つは、文字 (X、Y、Z、または P) があり、その後ろに文字や記号がない場合に一致させたい

  • "[X|Y|Z|P][0-9]"

これらの次のいくつかはより難しく、"#11.11=11.11"1 が数字であり、ポンド記号、ピリオド、および等号の間に任意の数の数字が存在する場合に一致します。また、ピリオドは必ずしも存在する必要はありません"#11=11"" #1.1=11""#11=1.1"

  • 何も思いつきません..."#[0-9][ |.] ..."

" ' "改行の後とその間のすべて

  • '[A-Za-z0-9]\n" しかし、これは私に1文字しか与えないことを知っています...

そして、私が思う簡単なものは、2つ()または2つの間の何かです[]

  • "(*) | [*]"?
4

10 に答える 10

1

私は正規表現に perl を使用していますが、探しているものと同じであることを願っています。

最初のものG[0-9]+はうまくいくはずです。角かっこは、正規表現が角かっこ内の文字 (0 ~ 9 の文字) の 1 つだけを+検索することを意味し、その直後は、1 つ以上の一致を検索することを意味します。

2 番目はもう少しトリッキーですが、私は\s[XYPZ]. 角括弧は以前と同じように機能し、X、Y、P、または Z の\sいずれかにのみ一致します。また、空白文字 (タブ、スペース、改行など) にも一致します。

3 つ目については、試してみ#[0-9]+\.?[0-9]+=[0-9]+\.?[0-9]+ます。左から右に行けば出会い\.?、それは新しい。\.リテラルのピリオドに一致します (ピリオド自体は任意の文字の 1 つに一致できることを意味するため、バックスラッシュでエスケープする必要があります)。疑問符は、ピリオドが存在するかどうかを示します (ピリオドのゼロまたは 1 つのインスタンスに一致します)。

4 つ目: '.*\n. ピリオド自体とアスタリスクの組み合わせは、0 個以上の文字に一致することを意味し、文字はすべてです。ただし、一重引用符をエスケープする必要があるかどうかはよくわかりません。

そして、5番目のもの(\(.*\)|\[.*\])については、トリックを行う必要があります. []()ブラケット自体が何かを意味するため、ブラケット内をエスケープする必要があります。また、|またはを意味するため、正規表現はバーの左側または右側にあるものと一致します。

于 2012-08-21T19:04:46.143 に答える
1

1> G[0-9]{1,3}

2> いいえ、違います。正しいものは [XYZ][0-9] です (OR 演算子 (|) は使用せず、角括弧内に文字を並べて記述します)

于 2012-08-21T18:46:27.827 に答える
1

正規表現の使用方法を実際に調べる必要があります。そうは言っても:

指定された文字の後に任意の数の数字が続き、それに一致します

G\d+

文字 (X、Y、Z、または P) があり、その後ろに文字や記号がない場合に一致させたい

(?<!\w)[XYZP][0-9]

これらの次のいくつかはより難しく、「#11.11=11.11」を青色にします

は?

「 ' 」の後と改行の間にあるもの

'(.+?)\n

そして、私が思う簡単なものは、2つの () または [] の間の何かです

\(.+?\)|\[.+?\]
于 2012-08-21T18:53:34.457 に答える
1

クイックでダーティですが、regexpal を使用してテストされています

1) G[0-9]{1-3} - '{1-3}' は、1 ~ 3 回発生する最後のシンボルを指定します。

2) ((.*|)) - エスケープ文字として「(」と「)」の前に「\」を置きます

3) [0-9]1*(.|)1*=1*(.|)1 - これは 3 つの例と一致します

4) \'.*\n - これでうまくいくと思います... '\n' は改行文字を表しますよね?

5) ((|[).*()|]) - これにもエスケープ文字が含まれています

繰り返しますが...すばやく汚い。Regexpal.com はあなたの友達です

于 2012-08-21T18:54:45.540 に答える
1

G の後に任意の桁数がある場合

\b([Gg]\d+)\b

これは、単語境界 (\b) の後に下位または上位の G [Gg] が続き、その後に 1 つ以上の (+) 数字 (\d) が続き、その後に単語境界 (\b) が続くものと一致します。

次の 3 つは、文字 (X、Y、Z、または P) があり、その後ろに文字や記号がない場合に一致させたい

これは少し厳しいです

\b[XYZP]([\W]|_)

これは、XYZ または P の後に単語以外の文字 \W が続くものと一致します (単語の文字は通常、az、0-9、およびアンダースコアです)。許可された。

于 2012-08-21T18:48:53.080 に答える
1

そして、私が思う簡単なものは、2つの () または [] の間の何かです

"(*) | [*]"?

@"\([^(]*\)"@"\[[^\[]*\]"

これは、開き括弧 - 次に、開き括弧ではない任意の数の文字 - と閉じ括弧を意味します。

スラッシュは、括弧を文字どおりに扱う必要があることを正規表現エンジンに示すために必要です。

@- 逐語的な文字列 - これらのスラッシュは、C# のエスケープ文字としてではなく、文字どおりに解釈する必要があることを C# に通知します。

" ' "改行の後とその間のすべて

同様に:@"'[^']*\n"

于 2012-08-21T18:49:05.250 に答える
1

最初のものには、この正規表現を使用できます:

^G\d+
于 2012-08-21T18:49:34.480 に答える
1
  1. G\d+
  2. [XYZP](?=\d)
  3. #(\d+(\.\d+)?)=(\d+(\.\d+)?)
  4. '.*?\n
  5. \(.*?\)|\[.*?\]

正規表現の説明はこちら。

于 2012-08-21T18:54:59.703 に答える
1

最初の1つ:

G[0-9]+

正規表現+では、少なくとも 1 つ以上 (前の「文字」の繰り返し) を意味します。*繰り返しなしまたは任意の回数使用することもできます。

2番目は次のようなものかもしれません:

^(X|Y|Z|P)$

これは実際には、行の先頭にあり、後ろに文字がない場合にのみ一致します。任意の場所に置き、その後ろの特定の文字のみを除外する場合は、次のように変更します。

[XYZP][^0-9a-z]

これは X または Y または Z または P の後に NOT 0-9 および NOT az が続きます

最初の例では OR 文字|を角かっこで使用していますが、角かっこで使用していないことに注意してください。

3番目の場合:

#[0-9]+\.[0-9]+=[0-9]+\.[0-9]+

100% 正しいとは限りません。どの文字をいつエスケープするか、いつも混乱します。#とをエスケープする必要があるかもしれません=

最後の 1 つは次のとおりです。

(\(.*\)|\[.*\])
于 2012-08-21T18:55:15.973 に答える
0

さまざまな方法で繰り返しを指定できます。用語の後の星印「*」は、その用語を 0 回、1 回、または数回繰り返すことを意味します。プラス記号「+」は、用語を 1 回または数回繰り返すことを意味します。で数値範囲を指定することもできます{n,m}。あなたの場合、式は次のようになります

G\d{1-3}

\d数字です。


この式を使用すると、サフィックスの前にない位置に一致させることができます

find(?!suffix)

記号の意味がわかりません

[XYZP](?![a-zA-Z specify your symbols here])

ポンド番号の場合

\#\d+(\.\d+)?=\d+(\.\d+)?

\# ポンド記号
\d+ 少なくとも 1 桁 (\.\d+)? オプションで ( ?) 少なくとも 1 桁が続くピリオド 最後に別の数字が続く等号


"'" と \n の間のすべて。ここでは、接頭辞と接尾辞の間の位置を見つけるこのパターンを使用します。

(?<=prefix)find(?=suffix)

(?<=').*(?=\n)

.*可能な限り任意の文字を意味します。または、使用することもできます

(?<=').*?(?=\n)

.*\nあまりにも多くの文字が取られる場合、できるだけ少ない文字を意味します。RegexOption.Multiline にも注意してください。$その設定によっては、代わりに を使用して行末をテストする必要があり\nます。


括弧 () または [] については、同じパターンを再度使用できます

(?<=prefix)find(?=suffix)

(?<=\().*?(?=\))|(?<=\[).*?(?=])

|代替手段はどこにありますか。

于 2012-08-21T19:09:06.490 に答える