0

入力文字列がいくつかあります。

Houston, TX
(Houston, TX)
South & West (Houston, TX)
(South & West (Houston, TX))

私はこのパターンを使用していますが、4 つすべてで機能していません。

.*\(*(.*),\s*(.*)\)*

上記の入力文字列からヒューストンTXを除外したいだけです。

ルールは、括弧内のものを取り出すか、括弧がない場合はそのものだけを取り出すことです。結果のリストには、2 つの項目だけが含まれます。

4

3 に答える 3

2

私はこれを2つのステップで行うと思います:

in_paren = re.compile(r'(?:\()([^\)\(]+)(?:\))')
match = in_paren.search(ss)
parts = match.group(1) if match else ss
city,state = parts.split(',')

これは関数として次のとおりです。

>>> def find_city_state(ss):
...     match = in_paren.search(ss)
...     parts = match.group(1) if match else ss
...     return [x.strip() for x in parts.split(',')]
... 
>>> for x in ("Houston, TX","(Houston,TX)","South & West (Houston, TX)","(South & West (Houston, TX))"):
...     print find_city_state(x)
... 
['Houston', 'TX']
['Houston', 'TX']
['Houston', 'TX']
['Houston', 'TX']
于 2013-01-17T15:06:39.943 に答える
2

python の正規表現操作ページを見てください。このようなことを行う方法を学習するときに役立つことがわかりました。

都市と州を分離したいかどうかはわかりませんが、次のようなグループを使用して分離できます。

import re

string = ('Houston, TX ' +
         '(San Francisco, CA) ' +
         'South & West (Houston, TX) ' +
         '(South & West (Houston, TX))')

matches = re.findall("([\w\s]+),\s(\w+)", string)
for match in matches:
    print 'City: ' + match[0] + ', State: ' + match[1]

出力:

City: Houston, State: TX
City: San Francisco, State: CA
City: Houston, State: TX
City: Houston, State: TX

正規表現:

([\w\s]+)グループ 1: スペースを含む複数の単語に一致

,\sカンマの後にスペース

(\w+)グループ 2: 1 つの単語に一致

于 2013-01-17T15:14:47.657 に答える
1
>>> import re
>>> A="Houston, TX (Houston, TX) South & West (Houston, TX) Los Angeles, CA Los Angeles"
>>> re.findall("\w[A-Za-z ]+, [A-Z]{2}",A)
['Houston, TX', 'Houston, TX', 'Houston, TX', 'Los Angeles, CA']

\w= アルファベットで始まるすべての名前に一致します

[A-Za-z ]+= は、スペースを含むすべての名前に一致します

, [A-Z]{2}= すべての略語に一致します (2 つの大文字)

于 2013-01-17T15:04:04.107 に答える