Python 正则表达式:解析具有非数字字边界的n个数字

Python 正则表达式:解析具有非数字字边界的n个数字,python,regex,Python,Regex,我希望这封信能让你心情愉快。我正在尝试查找有关\b表达式的快速教程(如果有更好的术语,请道歉)。我目前正在编写一个脚本来解析一些xml文件,但遇到了一些问题。我将展示一个xml示例: <....></...><...></...><OrderId>123456</OrderId><...></...> <CustomerId>44444444</CustomerId><.

我希望这封信能让你心情愉快。我正在尝试查找有关\b表达式的快速教程(如果有更好的术语,请道歉)。我目前正在编写一个脚本来解析一些xml文件,但遇到了一些问题。我将展示一个xml示例:

<....></...><...></...><OrderId>123456</OrderId><...></...>
<CustomerId>44444444</CustomerId><...></...><...></...>
在我的测试中,我的问题是在数字前后的某个地方合并对CustomerId的搜索。我想知道你们中是否有人可以帮助我解决我的问题,或者为我指出正确的道路(用指南或类似的话)。感谢您的帮助

Mods如果这是在错误的区域抱歉,我想在Python讨论中发布这一点,因为我不确定Python正则表达式是否支持此功能

再次感谢大家

darcmasta

txt=”“”
txt = """
<....></...><...></...><OrderId>123456</OrderId><...></...>
<CustomerId>44444444</CustomerId><...></...><...></...>
"""

import re
pattern = "<(\w+)>(\d+)<"
print re.findall(pattern,txt)
#output  [('OrderId', '123456'), ('CustomerId', '44444444')]
123456 44444444 """ 进口稀土
模式=(\d+)您可以考虑使用正则表达式中的回溯操作符来让人容易阅读:

import re
a = re.compile("(?<=OrderId>)\\d{6}")
a.findall("<....></...><...></...><OrderId>123456</OrderId><...></...><CustomerId>44444444</CustomerId><...></...><...></...>")
['123456']
b = re.compile("(?<=CustomerId>)\\d{8}")
b.findall("<....></...><...></...><OrderId>123456</OrderId><...></...><CustomerId>44444444</CustomerId><...></...><...></...>")
['44444444']
重新导入
a=重新编译(“(?)\\d{6}”)
a、 芬德尔(“123456444”)
['123456']
b=重新编译(“(?)\\d{8}”)
b、 芬德尔(“123456444”)
['44444444']

您应该使用原始字符串文字:

searchPattern = r'\b\d{16}\b'

普通(非原始)字符串文本中的转义序列
\b
表示退格字符,因此re模块将接收退格字符(未识别的转义序列,如
\d
按原样传递,即反斜杠后跟“d”).

为什么要用正则表达式解析xml,而不是一个经过验证的xml解析器?它实际上写入了一个日志文件,这简直是一团糟。我觉得引用几乎是强制性的。诀窍是我只需要查找CustomerId而不是OrderId。加上CustomerId有时会被破坏并报告为4444。
import re
a = re.compile("(?<=OrderId>)\\d{6}")
a.findall("<....></...><...></...><OrderId>123456</OrderId><...></...><CustomerId>44444444</CustomerId><...></...><...></...>")
['123456']
b = re.compile("(?<=CustomerId>)\\d{8}")
b.findall("<....></...><...></...><OrderId>123456</OrderId><...></...><CustomerId>44444444</CustomerId><...></...><...></...>")
['44444444']
searchPattern = r'\b\d{16}\b'