[英]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.