python, split, regex and combine re



我有一个键值格式的数据。

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'

最新更新