2016-08-28 18 views
0

私は単語の最初の単語にのみ'St' or 'St.' or 'st' or 'st.'を一致させたいです。 たとえば、「セントメアリー教会聖堂」 - 最初の聖だけを見つけるはずですPythonの正規表現で文字列の最初の単語に一致する方法を見つける

  • 'st。メアリー教会教会セント ' - ただ見つかるはずです。
  • 'st Mary Church Church Church St.' - 見つかるはずです

私は最終的に最初の出来事を '聖'と置き換えたいと思います。

私は文字通りこの問題にマッチする正規表現を見つけようと数時間を費やしていますので、私は最初に自分自身を試しました。

+1

なぜ正規表現が必要ですか?文字列を空白で単語に分割し、最初の文字列を取得するだけです。 – Blender

+1

コードは "St"のバリエーションで始まる文字列を処理するだけですか?あるいは、他の文字列は何か他のものから始まっていますか? – Dartmouth

答えて

1

正規表現を使用する必要はありません。文字列にsplit()メソッドを使用するだけで、空白で区切ります。これはあなたの文字列内のすべての単語のリストを返します。

matches = ["St", "St.", "st", "st."] 
name = "St. Mary Church Church St." 
words = name.split() #split the string into words into a list 
if words [0] in matches: 
    words[0] = "Saint" #replace the first word in the list (St.) with Saint 
new_name = "".join([word + " " for word in words]).strip() #create the new name from the words, separated by spaces and remove the last whitespace 
print(new_name) #Output: "Saint Mary Church Church St." 
+0

これはうまいですが、最初の単語がStか..などであるかどうかはチェックされません。 –

+0

"St"のバリエーションで始まらない文字列があるかどうか、OPは十分な情報を提供していません...私は私の答えを更新します。 – Dartmouth

+0

[split](https://docs.python.org/2/library/stdtypes.html?highlight=str.split#str.split)メソッドは、maxsplit引数を受け入れます。最初の分割を見つけた後にすべての文字列を処理しないようにするのは良いことです。 – Tryph

-1
import re 

string = "Some text" 

replace = {'St': 'Saint', 'St.': 'Saint', 'st': 'Saint', 'st.': 'Saint'} 
replace = dict((re.escape(k), v) for k, v in replace.iteritems()) 
pattern = re.compile("|".join(replace.keys())) 
for text in string.split(): 
    text = pattern.sub(lambda m: replace[re.escape(m.group(0))], text) 

これは動作するはずです、私は推測し、確認してください。 Source

+0

これはうまくいかず、何も置き換えられません。文字列の最初の単語が削除されたようです。 – Dartmouth

1

Regex subは、文字列内の置き換えの回数を定義できます。

すなわち:

>>> import re 
>>> s = "St. Mary Church Church St." 
>>> new_s = re.sub(r'^(St.|st.|St|st)\s', r'Saint ', s, 1) # the last argument defines the number of occurrences to be replaced. In this case, it will replace the first occurrence only. 
>>> new_s 
'Saint Mary Church Church St.' 
>>> 

はそれがhepls願っています。

+0

これはほとんど動作しますが、小さな修正が必要です。 "St"または "st"で始まる文字列を置き換えると、 "Saint"の後ろに空白がないので、 '' St Mary '' Church St。セント ' – Dartmouth

+0

ありがとうございました。しかし、この例で見たように、出力は良好でした。とにかく、 "st"式の後ろにスペースを入れ、 "Saint"の後ろにスペースを追加するように答えを編集しました。ありがとうございました。 ; ) – JazZ

0

正規表現'^\S+'を使用して、文字列の最初の空白以外の文字と一致させてみてください。

import re 

s = 'st Mary Church Church St.' 
m = re.match(r'^\S+', s) 
m.group() # 'st' 

s = 'st. Mary Church Church St.' 
m = re.match(r'^\S+', s) 
m.group() # 'st.' 
+0

@ orz、これは初めての場合もありますので、次回に予想される内容を書式別に示すために回答が編集されています。コードブロックでコードをフォーマットし、コンソールで実行する再現可能な例を使用して、何が起こっているかを簡単に説明してください。 SOにようこそ。 – pylang

関連する問題