これが機能しないのはなぜですか?
re.sub('\\b[a@](\\W|[a@])*[s5$](\\W|[s5$])*[s5$](\\W|[s5$])*($|\\W)', '*', '@ss')
@ss
が に置き換えられない理由がわかりません*
。同様に、@55
は置き換えられません。
これらは置き換えられます: a55、a5s、as5、ass
ありがとうございました!
これが機能しないのはなぜですか?
re.sub('\\b[a@](\\W|[a@])*[s5$](\\W|[s5$])*[s5$](\\W|[s5$])*($|\\W)', '*', '@ss')
@ss
が に置き換えられない理由がわかりません*
。同様に、@55
は置き換えられません。
これらは置き換えられます: a55、a5s、as5、ass
ありがとうございました!
@
は単語の文字ではないため、最初の文字は\b
一致しません。
これは私の提案です:
re.sub('(\\ba|@)(\\W|[a@])*[s5$](\\W|[s5$])*[s5$](\\W|[s5$])*($|\\W)', '*', '@ss')
\b[a@]
(に置き換え(\ba|@)
)
一種の「冒涜」チェックを試みている場合-正規表現からロジックを取り出します。
look_alike = {'@': 'A', '$': 'S'}
test_string = ''.join(look_alike.get(c, c) for c in your_string.upper()) # also look at `string.translate`
次にif 'ASS' in test_string
- または、re を使用した単語境界と同様です。
最初のセクションの周りに一対の括弧がありません。これを試して:
re.sub('(\\b[a@])*(\\W|[a@])*[s5$](\\W|[s5$])*[s5$](\\W|[s5$])*($|\\W)', '*', '@ss')