次のいずれかを持つことができる正規表現があります。
(src://path/to/foldernames canhave spaces/file.xzy)
(src://path/to/foldernames canhave spaces/file.xzy "optional string")
これらの式は、はるかに長い文字列内で発生します (個々の文字列ではありません)。re.search
orを使用するときに両方の式を一致させるのに問題re.findall
があります (文字列に複数の式がある可能性があるため)。
どちらかを個別に照合するのは簡単ですが、どちらの場合も照合して、2 つのグループが返されるようにするsrc://path/...
にはoptional string
どうすれNone
ばよいでしょうか。
ORグループを何らかの方法で指定する必要があると考えています---たとえば、次のように考えてください:
パターン\((.*)( ".*")\)
は 2 番目のインスタンスに一致しますが、最初のインスタンスには一致しません"..."
。
r = re.search(r'\((.*)( ".*")\)', '(src://path/to/foldernames canhave spaces/file.xzy)'
r.groups() # Nothing found
AttributeError: 'NoneType' object has no attribute 'groups'
whileは最初のグループに一致しますが、2 番目のインスタンスで をグループとして\((.*)( ".*")?\)
個別に識別しません。"optional string"
r = re.search(r'\((.*)( ".*")?\)', '(src://path/to/foldernames canhave spaces/file.xzy "optional string")')
r.groups()
('src://path/to/foldernames canhave spaces/file.xzy "optional string"', None)
(通常の表現の)表現の達人たち、何か考えはありますか?