Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何在同一行中正则化出2个区域?_Python_Regex_Dictionary_Expression - Fatal编程技术网

Python:如何在同一行中正则化出2个区域?

Python:如何在同一行中正则化出2个区域?,python,regex,dictionary,expression,Python,Regex,Dictionary,Expression,嗨,我想问一下如何做模拟正则表达式 我想把这两个数字都提取出来:3和74 我也有我的正则表达式模式regex_1=re.compile(“%Id=”([0-9]*)”)*) 其目的是对3和74进行正则表达式,然后将每个结果存储到字典属性中,它们仍将位于同一个键、值对中。提取id值,并将其作为值插入到新的字典结构中: xpath(//Edge[@Id='3' or @Id='74']) 结果: import re text = "xpath(//Edge[@Id='3' or @Id='74'

嗨,我想问一下如何做模拟正则表达式

我想把这两个数字都提取出来:3和74

我也有我的正则表达式模式
regex_1=re.compile(“%Id=”([0-9]*)”)*)


其目的是对3和74进行正则表达式,然后将每个结果存储到字典属性中,它们仍将位于同一个键、值对中。

提取id值,并将其作为值插入到新的字典结构中:

xpath(//Edge[@Id='3' or @Id='74'])
结果:

import re

text = "xpath(//Edge[@Id='3' or @Id='74'])"

pattern = re.compile(r".*Id='(\d+)'" * 2)

res = pattern.search(text)

print(res.groups())

new_storage = {
    "first_id": res.group(1),
    "second_id": res.group(2)
}

print(new_storage)

您是否希望将所有数值作为列表提取到预定义键中?谁能为你做以下工作

('3', '74')
{'first_id': '3', 'second_id': '74'}

或者,如果它们必须是
int
类型:

{'id': ['3', '74']}
您可以使用第一个匹配模式的xpath部分,然后使用
\G
锚来获得迭代匹配。数字在第1组中捕获

{'id': [3, 74]}
部分地

  • (?:
    非捕获组
    • xpath\(//
      Match
      xpath(//
    • |
    • \G(?!^)
      断言上一个匹配的结尾,而不是字符串的开头
  • 关闭组
  • [^@]*@
    匹配除@之外的任何字符,然后匹配
    @
  • [^=]*='
    匹配除=”之外的任何字符,然后匹配
    =
    和开头的
    '
  • (\d+)
    捕获组1,匹配1+个数字
  • 匹配
|

示例代码

(?:xpath\(//|\G(?!^))[^@]*@[^=]*='(\d+)'
输出

import regex

pattern = r"(?:xpath\(//|\G(?!^))[^@]*@[^=]*='(\d+)'"
s = "xpath(//Edge[@Id='3' or @Id='74'])"
print(regex.findall(pattern, s));

如果您可以使用PyPi正则表达式模块
(?:xpath\(//\G(?!^))[^@\r\n]*@[^\r\n=]*='(\d+)
(?:xpath\(/\G(?!^))[^@\r\n]*@[^\r\n=]*='\K\d+(?='))
hi.这个正则表达式看起来很长,只是为了工作。我想我的老板不会批准我们的脚本中使用这样的正则表达式。它不是很长,但也考虑了xpath部分。它们实际上是同一模式的两个变体。hi.你的模式很巧妙。因此,你只是将模式扩展了一点,以显式地包含t其他“Id”是否存在?是的。此模式将捕获这两个Id值,随后可通过.groups()方法提取。您也可以只执行以下操作:pattern=re.compile(r.“*Id=”(\d+”)*2)
(?:xpath\(//|\G(?!^))[^@]*@[^=]*='(\d+)'
import regex

pattern = r"(?:xpath\(//|\G(?!^))[^@]*@[^=]*='(\d+)'"
s = "xpath(//Edge[@Id='3' or @Id='74'])"
print(regex.findall(pattern, s));
['3', '74']