1

行頭の 3 つのハイフン ( ) の後に、ファイル内の残りのすべてのテキストをキャプチャしようとしています---

例:

このハイフンの最初のセットより上のものはキャプチャされません。

---

これがコンテンツです。キャプチャする必要があります。
このポイントを超える 3 つのハイフンのセットは無視する必要があります。

3 つのハイフンの最初のセットの後のすべてをキャプチャする必要があります。私が得た最も近いものは、[^(---)]+$わずかに機能するこの正規表現を使用することです。ハイフンの後のすべてがキャプチャされますが、ユーザーがそのポイントの後にハイフンを配置すると、代わりに、ユーザーが配置した最後のハイフンの後にキャプチャされます。

これをpythonと組み合わせて使用​​ してテキストをキャプチャしています。

誰かがこの正規表現の問題を解決するのを手伝ってくれるなら、私はそれを感謝します.

4

3 に答える 3

1
pat = re.compile(r'(?ms)^---(.*)\Z')

は、フラグとフラグ(?ms)を追加します。MULTILINEDOTALL

MULTILINEフラグは(^文字列の先頭だけでなく) 行の先頭と一致させます。これ---が必要なのは、行の先頭で発生するが、必ずしも文字列の先頭であるとは限らないためです。

DOTALLフラグは、.改行を含む任意の文字と一致させます。(.*)これは、複数の行に一致させるために必要です。

\Z文字列の末尾 (行の末尾ではなく) に一致します。

例えば、

import re

text = '''\    
Anything above this first set of hyphens should not be captured.

---

This is content. It should be captured.
Any sets of three hyphens beyond this point should be ignored.
'''

pat = re.compile(r'(?ms)^---(.*)\Z')
print(re.search(pat, text).group(1))

版画

This is content. It should be captured.
Any sets of three hyphens beyond this point should be ignored.

角かっこで正規表現文字クラスを定義すると、[...]角かっこ内のものは (一般に、 のようなハイフンで囲まれた範囲を除いてa-z) 単一の文字として解釈されることに注意してください。それらはパターンではありません。So[---]は と変わらない[-]。実際、は からまで[---]の文字の範囲です。--

文字クラス内の括弧も、区切り文字をグループ化するのではなく、リテラルの括弧として解釈されます。Soは、ハイフンと左右の括弧を含む文字クラス[(---)]と同等です。[-()]

したがって、文字クラス[^(---)]+はハイフンまたは括弧以外の任意の文字に一致します。

In [23]: re.search('[^(---)]+', 'foo - bar').group()
Out[23]: 'foo '

In [24]: re.search('[^(---)]+', 'foo ( bar').group()
Out[24]: 'foo '

これがどこに向かっているのか、なぜそれが問題に対して機能しないのかがわかります。

于 2013-08-24T01:05:51.007 に答える
1
s = open(myfile).read().split('\n\n---\n\n', 1)
print s[0] # first part
print s[1] # second part after the dashes

これはあなたの例でうまくいくはずです。分割する 2 番目のパラメーターは、文字列を分割する回数を指定します。

于 2013-08-24T01:51:54.310 に答える
1

質問に直接答えなくて申し訳ありませんが、正規表現が問題を複雑にしすぎているのではないでしょうか? 次のようなことができます。

f = open('myfile', 'r')

for i in f:
    if i[:3] == "---":
        break

text = f.readlines()

f.close()

または、何か不足していますか?

特定の目的のために正規表現の独自の機能が必要ない場合は、正規表現を完全に使用しないようにする方がクリーンで読みやすいので、維持するのが難しいと思う傾向があります。

于 2013-08-24T01:06:52.970 に答える