繁体   English   中英

正则表达式Python捕获引号中的字符串

[英]Regex Python capture string in quotes

我有一个带有这种形式的行的文件:

ClientsName(0) = "SUPERBRAND": ClientsName(1) = "GREATSTUFF": cClientsNames.Add Key:="SUPER", Item:=ClientsName

我想捕捉的名称在引号""ClientsName(0) =ClientsName(1) =

到目前为止,我想出了这段代码

import re

f = open('corrected_clients_data.txt', 'r')
result = ''
re_name = "ClientsName\(0\) = (.*)"
for line in f:
    name = re.search(line, re_name)
    print (name)

每行返回None 。。。

错误的两个来源可能是:反斜杠和捕获序列(.*) ...

您可以使用re.findall并使用\\d而不是0来使其更通用,从而更轻松地做到这一点:

import re

s = '''ClientsName(0) = "SUPERBRAND": ClientsName(1) = "GREATSTUFF": cClientsNames.Add Key:="SUPER", Item:=ClientsName'''

>>> print re.findall(r'ClientsName\(\d\) = "([^"]*)"', s)
['SUPERBRAND', 'GREATSTUFF']

您还必须注意的另一件事是,您对search()findall()的参数顺序是错误的。 它应该如下所示: re.search(pattern, string)

使用后向搜索通过re.findall函数获取ClientsName(0)ClientsName(1)值,

>>> import re
>>> str = '''ClientsName(0) = "SUPERBRAND": ClientsName(1) = "GREATSTUFF": cClientsNames.Add Key:="SUPER", Item:=ClientsName'''
>>> m = re.findall(r'(?<=ClientsName\(0\) = \")[^"]*|(?<=ClientsName\(1\) = \")[^"]*', str)
>>> m
['SUPERBRAND', 'GREATSTUFF']

说明:

  • (?<=ClientsName\\(0\\) = \\")正向ClientsName(0) = "用于在字符串ClientsName(0) = "之后设置匹配标记
  • [^"]*然后,它的不匹配任何字符"零次或多次。 因此它匹配第一个值,即SUPERBRAND
  • | 用于组合两个正则表达式的逻辑OR运算符。
  • (?<=ClientsName\\(1\\) = \\")[^"]*匹配字符串ClientsName(1) = " upto next next "之后的任何字符。 现在它匹配第二个值,即GREATSTUFF

您可以使用re.findall并只进行前两个匹配:

>>> s = '''ClientsName(0) = "SUPERBRAND": ClientsName(1) = "GREATSTUFF": cClientsNames.Add Key:="SUPER", Item:=ClientsName'''
>>> re.findall(r'\"([^"]+)\"' , s)[:2]
['SUPERBRAND', 'GREATSTUFF']

尝试这个

import re

text_file = open("corrected_clients_data.txt", "r")
text = text_file.read()
matches=re.findall(r'\"(.+?)\"',text)

text_file.close()

如果您注意到问号(?)表示我们必须在遇到的第一个双引号处停止读取字符串。

希望这会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM