これは本当に簡単な質問ですが、どこでも答えは見つかりません。改行や文字列の末尾に一致する正しい正規表現の構文が見つかりません
(注:私は、Pythonを使用していますが、これは問題にはならない。)
は、私は次の文字列を持っていると言う:
s = "foo\nbar\nfood\nfoo"
私は単純にマッチする正規表現を見つけようとしています両方のインスタンス "foo"ではなく、 "food"ではなく、 "food"の "foo"に改行または文字列の終わりの直後にはないという事実に基づいています。
これは多分私の質問を表現するにはあまりにも複雑な方法ですが、それは具体的なものを提供します。結果は(注:私が望む結果は[foo\n
、foo
]である):でここ
foo[\n\Z]
=> ['foo\n'
]
foo(\n\Z)
=> ['\n'
、''
] < =これは、改行とEOSと一致するようだが、ないfoo
foo($|\n)
=> ['\n'
、''
]
(foo)($|\n)
=> [(foo
、'\n'
)、(foo
、''
)] =ほとんどが<、これは使用可能なプランBですが、私は完璧な解決策を見つけるしたいと思います。
私はそれが仕事をしただけの事はある:
foo$|foo\n
=> ['foo\n'
、 `「FOO」]
これは、このような単純な例の罰金ですが、どのようにそれを見るのは簡単ですはるかに大きな表現で扱いにくくなる可能性があります(そして、これは私が実際に使っているより大きな表現のためのものです)。余談
興味深い:、私は単に私の「特定の文字」の\n
を置き換えることができここでIn regex, match either the end of the string or a specific character
:私は私の問題に見つけることができる最も近いSOの質問はこれ一つでした。今、受け入れられた答えは、正規表現/(&|\?)list=.*?(&|$)/
を使用しています。私はOPがJavaScriptを使用していたことに気づきました(質問にはjavascript
というタグがついていました)ので、JavaScript正規表現インタープリタが異なるかもしれませんが、Pythonで上記の正規表現を使って質問に与えられた正確な文字列を使用すると、
>>> findall("(&|\?)list=.*?(&|$)", "index.php?test=1&list=UL")
[('&', '')]
>>> findall("(&|\?)list=.*?(&|$)", "index.php?list=UL&more=1")
[('?', '&')]
だから私は困惑しています。
あなたは[re.MULTILINE](http://docs.python.org/2/library/re.html)について知っていますか? –
はい、私はPythonで私にとってはうまくいくことを知っていますが、私は言語にとらわれないソリューションを探したいと思います。 –