我希望这条消息让你精神振奋。我正在尝试找到关于\ b表达式的快速教程(如果有更好的术语,请道歉)。我正在编写一个脚本来解析一些xml文件,但是遇到了一些速度障碍。我将展示我的xml示例:
<....></...><...></...><OrderId>123456</OrderId><...></...>
<CustomerId>44444444</CustomerId><...></...><...></...>
&LT; ...&GT;是不重要和不相关的xml代码。主要关注CustomerID和OrderId。
我的问题在于解析字符串,类似于上面的语句。我有一个完美的regexParse定义。但它并不直观。我只需要匹配包含44444444的字符串部分。
我的当前设置是:
searchPattern = '>\d{8}</CustomerId'
大!它有效,但我想以正确的方式做到这一点。我的想法是1)找到8位数2)如果某个单词边界是非数字的,那么匹配后CustomerId将其返回。
点子:
searchPattern = '\bd{16}\b'
我的测试中的问题是在数字之前和之后的某处搜索CustomerId。我想知道你们中是否有人可以帮助我解决我的问题,或者指出我在正确的道路上(用指南的话或其他方式)。任何帮助表示赞赏。
Mods如果这是在错误的区域道歉,我想在Python讨论中发布这个,因为我不确定Python regex是否支持此功能。
再次感谢所有人,
darcmasta
答案 0 :(得分:0)
txt = """
<....></...><...></...><OrderId>123456</OrderId><...></...>
<CustomerId>44444444</CustomerId><...></...><...></...>
"""
import re
pattern = "<(\w+)>(\d+)<"
print re.findall(pattern,txt)
#output [('OrderId', '123456'), ('CustomerId', '44444444')]
答案 1 :(得分:0)
您可以考虑在正则表达式中使用回溯运算符,以便人们轻松阅读:
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']
答案 2 :(得分:0)
您应该使用原始字符串文字:
searchPattern = r'\b\d{16}\b'
普通(非原始)字符串文字中的转义序列\b
表示退格字符,因此re模块将接收的内容(无法识别的转义序列,如\d
被传递为-is,即反斜杠后跟'd')。