2

これが機能しないのはなぜですか?

re.sub('\\b[a@](\\W|[a@])*[s5$](\\W|[s5$])*[s5$](\\W|[s5$])*($|\\W)', '*', '@ss')

@ssが に置き換えられない理由がわかりません*。同様に、@55は置き換えられません。

これらは置き換えられます: a55、a5s、as5、ass

ありがとうございました!

4

3 に答える 3

2

@は単語の文字ではないため、最初の文字は\b一致しません。

これは私の提案です:

re.sub('(\\ba|@)(\\W|[a@])*[s5$](\\W|[s5$])*[s5$](\\W|[s5$])*($|\\W)', '*', '@ss')

\b[a@](に置き換え(\ba|@))

于 2012-08-16T23:29:55.327 に答える
0

一種の「冒涜」チェックを試みている場合-正規表現からロジックを取り出します。

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 を使用した単語境界と同様です。

于 2012-08-16T23:43:40.843 に答える
0

最初のセクションの周りに一対の括弧がありません。これを試して:

re.sub('(\\b[a@])*(\\W|[a@])*[s5$](\\W|[s5$])*[s5$](\\W|[s5$])*($|\\W)', '*', '@ss')
于 2012-08-16T23:29:20.153 に答える