0

こんにちは、DXF ファイルを扱っていて、正規表現で問題が発生しました。私はこのようなテキストを持っています

   BODY
   123
   abc
   GR-BODY
   attrib
   AcdbLine

そして、うまくいくはずの正規表現を書きましたが、明らかに、この正規表現にはまだ助けが必要です

ここに私のコードがあります

string[] tmp = Regex.Split(originalString, @"(3DFACE|3DSOLID|ACAD_PROXY_ENTITIY|ARC|ATTDEF|ATTRIB|BODY|CIRCLE|DIMENSION|ELLIPSE|HATCH|HELIX|IMAGE|INSERT|LEADER|LIGHT|LWPOLYLINE|MLINE|MLEADERSTYLE|MLEADER|MTEXT|OLEFRAME|OLE2FRAME|POINT|POLYLINE|RAY|REGION|SEQEND|SHAPE|SOLID|SPLINE|SUN|SURFACE|TABLE|TEXT|TOLERANCE|TRACE|UNDERLAY|VERTEX|VIEWPORT|WIPEOUT|XLINE|LINE)", RegexOptions.None);

BODYテキストをキャッチしたいのですが、GR-BODYはまだ含まれています.GR-BODYを除外するにはどうすればよいですか? ありがとう

EDIT 1申し訳ありませんが、以前に間違ったコードを探しました

うーん、私はこのように出力したい

tmp[0] = BODY
tmp[1] = 123\nabc\nGR-LINE\nattrib\nAcdbLine

私のコードはこのようにすることしかできなかったので

tmp[0] = BODY
tmp[1] = 123\nabc\nGR-
tmp[2] = BODY\nattrib\nAcdbLine
4

2 に答える 2

1

その正規表現ステートメントは機能するはずです。代わりにRegex.Matchesを使用してMatchCollectionを返すようにしてください。

   MatchCollection mc = Regex.Matches(originalString, @"(3DFACE|3DSOLID|ACAD_PROXY_ENTITIY|ARC|ATTDEF|ATTRIB|BODY|CIRCLE|DIMENSION|ELLIPSE|HATCH|HELIX|IMAGE|INSERT|LEADER|LIGHT|LWPOLYLINE|MLINE|MLEADERSTYLE|MLEADER|MTEXT|OLEFRAME|OLE2FRAME|POINT|POLYLINE|RAY|REGION|SEQEND|SHAPE|SOLID|SPLINE|SUN|SURFACE|TABLE|TEXT|TOLERANCE|TRACE|UNDERLAY|VERTEX|VIEWPORT|WIPEOUT|XLINE|LINE)", RegexOptions.None);
   string[] tmp = mc.Cast<Match>().Select(m => m.Value).ToArray();
于 2012-07-10T05:27:44.833 に答える
0

単語が常に行の最初から最後まである場合は、パターンに次のように伝えます。

string[] tmp = Regex.Split(originalString, @"^(3DFACE|3DSOLID|ACAD_PROXY_ENTITIY|ARC|ATTDEF|ATTRIB|BODY|CIRCLE|DIMENSION|ELLIPSE|HATCH|HELIX|IMAGE|INSERT|LEADER|LIGHT|LWPOLYLINE|MLINE|MLEADERSTYLE|MLEADER|MTEXT|OLEFRAME|OLE2FRAME|POINT|POLYLINE|RAY|REGION|SEQEND|SHAPE|SOLID|SPLINE|SUN|SURFACE|TABLE|TEXT|TOLERANCE|TRACE|UNDERLAY|VERTEX|VIEWPORT|WIPEOUT|XLINE|LINE)$", RegexOptions.Multiline);

これにより、期待どおりの出力が得られるはずです。

^オプションが使用されている場合、行の先頭に一致しますMultiline

$オプションが使用されている場合、行の末尾に一致しますMultiline

于 2012-07-10T08:24:28.050 に答える