Pythonの複数行の文字列をエスケープ文字と照合するためのflexの使用

バリー

Pythonの複数行コメントをflexと一致させる方法を知りたいです。そして、私はいくつかの問題に遭遇します以下は正規表現うまくいきます、しかしフレックスによって認識されません、私はそれを修正する方法がわかりません。

"""[^"\\]*(?:(?:\\.|"{1,2}(?!"))[^"\\]*)*"""

以前、私は以下を使用しました:

["]{3}(\\["])*(["]{0,2}[^"](\\["])*)*["]{3}

次のようなコメントを検出できます:

"""A\"""A"""

ただし、次のように複数の\を処理することはできません。

'''A\\\\'''A=B'''C'''

それを全体として認識しない:

'''A\\\\'''  (comment)   
A=B     
'''C'''(comment) 
いう

単一の正規表現でPythonの長い文字列を認識できます。それはきれいではありませんが、私はそれがうまくいくと信じています:

["]{3}(["]{0,2}([^\\"]|\\(.|\n)))*["]{3}

これは元の正規表現とかなり似ていますが、バックスラッシュの処理をに制限しようとしない\"ため\\、バックスラッシュ文字として正しく識別できます。

おそらく読みやすい(ただし少し遅い)解決策は、startstart条件を使用することです。ここでyymore()は、"""区切り文字を含まない単一のトークンを作成するために使用しますが、本番コードはおそらくPythonのさまざまなバックスラッシュエスケープを解釈しようとします。(単一の正規表現で文字列全体を認識しようとするのではなく、開始条件の使用を動機付けるのはまさにこの必要性です。)

%x SC_LONGSTRING
%%
["]{3}     BEGIN(SC_LONGSTRING);
<SC_LONGSTRING>{
  [^\\"]+  yymore();
  \\(.|\n) yymore();
  ["]["]?  yymore();
  ["]{3}   { BEGIN(INITIAL);
             yylval.str = malloc(yyleng - 2);
             memcpy(yylval.str, yytext, yyleng - 3);
             yylval.str[yyleng - 3] = 0;
             return TOKEN_STRING;
           }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Pythonの複数行の文字列をエスケープ文字と照合するための正規表現

分類Dev

エスケープされた引用符で引用符付き文字列を照合するためのJava Regex

分類Dev

複数行の文字列で複数のヘッダーとその段落を照合するPython正規表現

分類Dev

複数行の文字列をエスケープする方法

分類Dev

複数の文字グループをPythonの正規表現と照合する

分類Dev

XMLで使用するための文字列のエスケープ

分類Dev

照合のために複数のフィルターに文字列を渡す

分類Dev

RegExを使用したエスケープ文字の有無にかかわらず文字列の照合

分類Dev

文字列内の複数のキーを照合するためのJava正規表現

分類Dev

2つの文字列間で複数行の文字を照合するPowerShell

分類Dev

1行で複数の大文字と小文字を区別する文字列を照合する

分類Dev

文字列(英数字)をPythonのすべての一意の文字と照合するための正規表現

分類Dev

数値と文字列を照合するための正規表現

分類Dev

文字列内の特定のパターンを照合するための文字列プロトタイプ構文

分類Dev

文字列を部分文字列と照合するための正規表現

分類Dev

Pythonでの複数の文字列照合

分類Dev

正規表現:複数行にわたる不要なデータと混合された2つのキーワード間の文字列を照合します

分類Dev

2つの部分文字列間で任意の数の要素を照合するためのPython正規表現?

分類Dev

複数行のテキストでグループを照合するための正規表現

分類Dev

文字列の部分文字列を照合するためのSwiftswitchステートメント

分類Dev

case_whenを使用した文字列照合の複数のパターン

分類Dev

文字列のリストから最初の文字列を照合するためのパンダ/正規表現ベースのアプローチ

分類Dev

grepを使用した複数の文字列の正確な文字列照合

分類Dev

postgresqlクエリの配列内の文字列をエスケープするときに使用するphp関数

分類Dev

長い文字列内のStartWithおよびEndWith文字列と複数の文字列を照合する正規表現

分類Dev

複数の文字列を照合して結合する

分類Dev

Luaで複数行の文字列の角かっこをエスケープする方法

分類Dev

grepを使用して2列目と5列目の文字列を照合するための正規表現

分類Dev

Rでループすることなく、テキストのベクトル内の複数の文字列を照合して置換します

Related 関連記事

  1. 1

    Pythonの複数行の文字列をエスケープ文字と照合するための正規表現

  2. 2

    エスケープされた引用符で引用符付き文字列を照合するためのJava Regex

  3. 3

    複数行の文字列で複数のヘッダーとその段落を照合するPython正規表現

  4. 4

    複数行の文字列をエスケープする方法

  5. 5

    複数の文字グループをPythonの正規表現と照合する

  6. 6

    XMLで使用するための文字列のエスケープ

  7. 7

    照合のために複数のフィルターに文字列を渡す

  8. 8

    RegExを使用したエスケープ文字の有無にかかわらず文字列の照合

  9. 9

    文字列内の複数のキーを照合するためのJava正規表現

  10. 10

    2つの文字列間で複数行の文字を照合するPowerShell

  11. 11

    1行で複数の大文字と小文字を区別する文字列を照合する

  12. 12

    文字列(英数字)をPythonのすべての一意の文字と照合するための正規表現

  13. 13

    数値と文字列を照合するための正規表現

  14. 14

    文字列内の特定のパターンを照合するための文字列プロトタイプ構文

  15. 15

    文字列を部分文字列と照合するための正規表現

  16. 16

    Pythonでの複数の文字列照合

  17. 17

    正規表現:複数行にわたる不要なデータと混合された2つのキーワード間の文字列を照合します

  18. 18

    2つの部分文字列間で任意の数の要素を照合するためのPython正規表現?

  19. 19

    複数行のテキストでグループを照合するための正規表現

  20. 20

    文字列の部分文字列を照合するためのSwiftswitchステートメント

  21. 21

    case_whenを使用した文字列照合の複数のパターン

  22. 22

    文字列のリストから最初の文字列を照合するためのパンダ/正規表現ベースのアプローチ

  23. 23

    grepを使用した複数の文字列の正確な文字列照合

  24. 24

    postgresqlクエリの配列内の文字列をエスケープするときに使用するphp関数

  25. 25

    長い文字列内のStartWithおよびEndWith文字列と複数の文字列を照合する正規表現

  26. 26

    複数の文字列を照合して結合する

  27. 27

    Luaで複数行の文字列の角かっこをエスケープする方法

  28. 28

    grepを使用して2列目と5列目の文字列を照合するための正規表現

  29. 29

    Rでループすることなく、テキストのベクトル内の複数の文字列を照合して置換します

ホットタグ

アーカイブ