2017-07-26 16 views
3

私はパターンの文字列をとるPythonの正規表現を書きたい:Python Regex:なぜPythonは私のパターンを受け入れないのですか?

"u'Johnsの場所」、"

とリターンを:

ジョンズの場所

文字 'u'を探してください。アポストロフィーはそれの後に来て、アポストロフィーはcの前に来ますこれら2つのアポストロフィ間にあるものを返します。フィルタリングなしで "u'Johnsの場所」"

title = "u'Johns's Place'," 
print re.sub(r"u'([^\"']*)',", r"\"\1\"", title) 

しかし、私はまだ文字列全体を得た

はしたがって、私は、次のコードを書きました。

解決方法をご存知ですか?

+4

私はおよそ不審なよあなたの文字列に 'u 'があります。どうやってこの文字列を取得していますか? – idjaw

+0

実際には、この「u」は「unicode」と言わなければなりません。 – CrazySynthax

+4

はい、それはまさに私がそれについて疑っている理由です。私はあなたがその文字列をどのように取得しているのかを説明する必要があると思います。これはXY問題のような臭いです。 – idjaw

答えて

7

'"John's"にあるため、Pythonはパターンを受け入れません。あなたのパターンに記述されているように、カンマが続きません。 "または'ではなく、[^\"']*の文字のみを許可するため、この一致では',が引き続き検索されません。

PythonでJSONを解析する場合は、エキスパートされたユニコード文字列にregexenを適用しないで、jsonパッケージを使用します。私は多くのPythonを使用していないが、この正規表現は、最初から

^u'(.*)',$ 

あなたの問題を解決する必要があり

+0

OK。しかしPlaceの後にカンマがあります。だから私はPythonがJohnのカンマを無視し、 "Place"の後にコンマをキャッチすると思う。 – CrazySynthax

+1

@CrazySynthax:マッチングは続行できず、 '[^ \" '] * 'で禁止されている。 –

2

をuと単一引用符と一致し、最後

で単一引用符とコンマまで、その後何をキャプチャ(任意の文脈がある場合は、他の言葉で)置き換えよりも、あなたの文字列に複数があるかどう
print re.sub(r"^u'(.*)',$", r"\"\1\"", title) 

削除^と$

0

私は目を見つけた大きな研究を行った後、パッケージですhttps://simplejson.readthedocs.io/en/latest/

これは、すべての文字列に「..」を入れずにJSONファイルを読むことができます。

import simplejson as json 
import requests 

response_json = requests.get(<url-address>) 
current_json = json.loads(response_json.content) 

current_jsonには、すべての文字列のbeginnigに「u」という文字は含まれません。

それはJSON形式で必要なのとそれは引用符( ")ではない、それは単一引用符で区切られたキーと値を返すので( ')、部分的に私の質問に答えると。

関連する問題