Regex加载整数“的;“关键值”;配对,例如3键1“;价值1“;键2“;价值2“;键3“;价值3“;

Regex加载整数“的;“关键值”;配对,例如3键1“;价值1“;键2“;价值2“;键3“;价值3“;,regex,Regex,我正在努力创建一个正则表达式来解析一行,该行包含一个整数后面的整数个值,可以让它大部分工作,但不适用于整数为零且后面没有值的情况 e、 g 也可以是整数或之后的整数个空格分隔的键值对 ..... 3 key1 "value1" key2 "value2" key3 "value3"...... 很乐意将它们放入一个单独的命名组中,但在以后将它们放入单独的命名组中可能会很有用 3 "value1" "value2" "value3" "someother non-related text" (

我正在努力创建一个正则表达式来解析一行,该行包含一个整数后面的整数个值,可以让它大部分工作,但不适用于整数为零且后面没有值的情况

e、 g

也可以是整数或之后的整数个空格分隔的键值对

..... 3 key1 "value1" key2 "value2" key3 "value3"......
很乐意将它们放入一个单独的命名组中,但在以后将它们放入单独的命名组中可能会很有用

3 "value1" "value2" "value3" "someother non-related text"

(?<my_named_group>([0])|[0-9] (?<my_values>(".*"?)?))

my_named_group = 3
my_values = '"value1" "value2" "value3"'
至于第二个问题/正则表达式

3 key1 "value1" key2 "value2" key3 "value3" "someother non-related text"

my_named_group = 3
my_values = 'key 1 "value1" key 2 "value2" key3 "value3"'

如果我理解正确的话,我们在引号中有一些数字后跟一些文本,我们可以开始使用一个简单的表达式来解决它:

([0-9]+).+?(\".*\")
其中,所需数字位于第一个捕获组
([0-9]+)
,另一个所需子字符串位于第二个捕获组
(\“*”)

试验
如果我理解正确的话,我们在引号中有一些数字后跟一些文本,我们可以开始使用一个简单的表达式来解决它:

([0-9]+).+?(\".*\")
其中,所需数字位于第一个捕获组
([0-9]+)
,另一个所需子字符串位于第二个捕获组
(\“*”)

试验
如果您尝试
(?[0-9]+)\s+“(?.*)”
,会怎么样?看看当它以零开始时,你到底想要匹配什么?如果它不是零,您想匹配整行还是3和
“value1”“value2”“value3”
只匹配后面的3个值,在这个表达式中后面什么都不匹配如果您尝试
(?[0-9]+)\s+“(?*”
?看看当它以零开始时,你到底想要匹配什么?如果它不是零,您想匹配整行还是3和
“value1”“value2”“value3”
只匹配后面的3个值,在这个表达式后面没有任何内容是正确的emma,两个完全独立的正则表达式应该更清楚地说明。当整数为0时,我不想匹配任何东西,当整数为正时,例如3,我想匹配接下来的3个值,而不是第4个值。第二个值类似但更复杂,如果整数为0,我不想匹配任何键值对(空格分隔),但如果是例如3,我希望匹配3个键值对(空格分隔),在这两个正则表达式后面会有一些字段,例如“其他一些不相关的文本”,它们不应该匹配,希望像mud一样清晰。这是正确的emma,两个完全独立的正则表达式应该更清楚地说明。当整数为0时,我不想匹配任何东西,当整数为正时,例如3,我想匹配接下来的3个值,而不是第4个值。第二个值类似但更复杂,如果整数为0,我不想匹配任何键值对(空格分隔),但如果是例如3,我希望匹配3个键值对(空格分隔),这两个正则表达式后面都会有字段,即“其他一些不相关的文本”,不应该匹配,希望现在像mud一样清晰
([0-9]+).+?(\".*\")
# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility

import re

regex = r"([0-9]+).+?(\".*\")"

test_str = ("2 \"value1\" \"value2\" \"someother non-related text\"\n"
    "0 \"someother non-related text\"\n"
    "3 key1 \"value1\" key2 \"value2\" key3 \"value3\"")

subst = "\\1\\n\\2"

# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)

if result:
    print (result)

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.