次の文字列を持っている想像して置き換えます。Pythonの正規表現は、いくつかの言葉が、すべてが
"badger mushroom badger mushroom mushroom mushroom"
しかし、私は正規表現が「おばあちゃんとキノコの言葉以外のすべて」に一致することはありません。手伝って頂けますか?
次の文字列を持っている想像して置き換えます。Pythonの正規表現は、いくつかの言葉が、すべてが
"badger mushroom badger mushroom mushroom mushroom"
しかし、私は正規表現が「おばあちゃんとキノコの言葉以外のすべて」に一致することはありません。手伝って頂けますか?
これは
p = re.compile(r'(?!\bbadger\b|\bmushroom\b)\b[^\s]+\b')
test_str = "badger randomword badger mushroom mushroom somethingelse"
subst = "mushroom"
result = re.sub(p, subst, test_str)
(?!\bbadger\b|\bmushroom\b)\b[^\s]+\b
Pythonのコードを動作します
ありがとうございます。私は否定的な先読みについて読むつもりです –
@EduardoAlmeidaあなたはサイトを使用することができますhttps://regex101.com/ それは正規表現で何が起こっているのいくつかの簡単な説明があります – rock321987
あなたは本当に単純なパターンになるだろう関数のパラメータを持つre.sub
使用することができます
oldstring = "badger randomword badger mushroom mushroom somethingelse"
newstring = ""
for part in oldstring.split(" "):
if part in ["badger", "mushroom"]:
newstring += part
else:
newstring += "mushroom"
newstring += " "
newstring = newstring[:-1]
非正規表現溶液(と、より読みやすいし)、このことでしょうこのタスクを実行する-regex onelinerは次のようになります。 -
new_string = ' '.join(word if word == 'badger' else 'mushroom' for word in original_string.split())
ここでは、複雑な正規表現を使用することをお勧めします。sinc Pythonのe Beautiful Is Better Than Ugly
簡単な非:
import re
s = "badger randomword badger mushroom mushroom somethingelse"
re.sub('\w+', lambda x: 'badger' if x.group(0) == 'badger' else 'mushroom', s)
この
(?!badger\b)\b\w+\b
説明してみてください。
(?!…)
:否定先読みsample
\
: "単語文字":特殊文字sample
\w
エスケープASCII文字を、数字またはアンダースコアsample
+
:1つまたは複数のsample
Pythonの
import re
p = re.compile(ur'(?!badger\b)\b\w+\b')
test_str = u"badger randomword badger mushroom mushroom somethingelse"
subst = u"mushroom"
result = re.sub(p, subst, test_str)#badger mushroom badger mushroom mushroom mushroom
ベイダーやキノコのためにチェックし、それを否定しますか? – Mathias711
https://regex101.com/r/aV4rE9/1 – rock321987
私は非正規表現の回答を投稿することができますが、それも良いでしょうか?正規表現は時々圧倒される! – linusg