の途中で遭遇した文字列は、私は私が解析する必要があるファイルのある領域を見つけるために使用され、次の正規表現があれば正規表現が一致しないために:パターン
GetShapeOrRegexSnippet
がで定義され
public static readonly Regex ObjectAction = new Regex([email protected]"(?<Shape>{GetShapeOrRegexSnippet}).+?userdata\s"".*?action=(?<ActionType>\w+)\^(?<ActionPropertyString>.*?)\^\""", RegexOptions.Singleline);
:
を. userdata
始まる私のコレクション(
rect
、
circ
、
line
など)と行の
ShapeCodes
の一つに遭遇(を含む)の間の領域に一致する
private static string GetShapeOrRegexSnippet => ShapeCodes.Aggregate((i, j) => i + '|' + j);
。しかし、所定の形状は、関連するuserdata
文字列を持っていない可能性がありますように、それはRegex
のいずれかに遭遇した場合ことを規定することが可能であることが完全に可能である
line \
16.5894 34.4828 34.8993 46.3054 19.6616 41.3793 \
11.6741 44.9507
. filled 1
. dynprop \
(FOX_VAR_3 \
(= * \
(ecolor FOX_VAR_3))) \
(o2 \
(= * \
(call fox_oos(__self))))
. userdata "FOX_VAR=3^attr=ECOLOR^attrval=3^required=0^var=UPDATETAG33^delta=1.000000^conv=LOOKUP^type=LONG^minstate=0^num_entries=2^entries=7,7^END_FOXV= ^oos_obj=0002"
:これは、同様に形成セクションのために正常に動作しますShapeCodes
userdata
文字列が出現する前に再びそのセクションに一致し、ファイルのelseをチェックし続けますか?
(?<Shape>rect|frect|fpie|spline|poly|line|fsec|fcir).+?(?!rect|frect|fpie|spline|poly|line|fsec|fcir)userdata\s\".*?attr=(?<AttributeType>\w+)\^(?<AttributePropertyString>.*?)\^(?=(?:END_FOXV))
これが可能である:(私は私も何か間違ったことをやっている可能性がRegex
に非常に新しいです)
私の最初の考えは否定先読みを使用していたが、これは動作しませんか?もしそうなら、正しい方向に私を向けることができますか?もしそうでなければ、私に知らせてください。私は別の方法を試みます。
最初の '。+? 'を'(?:(?!{GetShapeOrRegexSnippet} | action =)。*) 'に置き換えます。 –
@WiktorStribiżewこれは、おかしなことをするようだ!答えとして書くと –