我有一个键值格式的数据。
key=1234 key1="value in text"
我想创建一个正则表达式来分割单个键的值。
例如:
- key={regex}必须返回1234
- key1={regex}必须返回"文本中的值">
regex="key="(.*?)"|key=([^ ]*)"
我试过这个正则表达式,但它不起作用。你能帮帮我吗?
我想通过regex和spark的帮助,以这样一种方式分割字符串,以获得表格格式的结果。
键|key1|值|文本中的值|
您可以使用PyPi正则表达式库和类似的代码
import regex
text = 'key=1234 key1="value in text"'
# key = 'key1' # => value in text
key = 'key' # => 1234
pattern = fr'b{regex.escape(key)}=(?|"([^"]*)"|(S*))'
match = regex.search(pattern, text)
if match:
print(match.group(1)) # => 1234
请参阅在线Python演示详细信息:
b
-一个词的边界{regex.escape(key)}
-传递给正则表达式的密钥=
-等号(?|"([^"]*)"|(S*))
-分支重置组匹配"([^"]*)"
-一个"
字符,然后将除"
之外的零个或多个字符捕获到组1中,然后是一个"
字符|
-或(S*)
-组1(同样,因为它是一个分支重置组(:零个或多个非空白字符
这是我的";分支重置组-将不同的模式捕获到相同的组中";YT视频展示了分支重置组的使用。
如果字符串的上下文是有效的,即键之后的所有内容都被封装在引号中,那么我更愿意将字符串解析到字典中,并获得您想要的值:
import re
string = 'key=1234 key1="value in text"'
replace = lambda x: (', ' if x.group(1) else '') + f'"{x.group(2)}":'
my_dict = eval(re.sub(r'(s)?(w+)=',replace, f"{{{string}}}"))
my_dict['key']
# out[23] 1234
my_dict['key1']
# out[24] 'value in text'