0

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

<....></...><...></...><OrderId>123456</OrderId><...></...>
<CustomerId>44444444</CustomerId><...></...><...></...>

<...> 是不重要且不相关的 xml 代码。主要关注 CustomerID 和 OrderId。

我的问题在于解析一个字符串,类似于上面的语句。我有一个完美的 regexParse 定义。然而它并不直观。我只需要匹配包含 44444444 的字符串部分。

我当前的设置是:

searchPattern = '>\d{8}</CustomerId'

伟大的!它有效,但我想以正确的方式去做。我的想法是 1)找到 8 个数字 2)如果某个单词边界是非数字之后匹配 CustomerId 返回它。

主意:

searchPattern = '\bd{16}\b'

我在测试中遇到的问题是在数字前后某处对 CustomerId 的搜索。我想知道你们中的任何人是否可以帮助我解决我的问题,或者指出我正确的道路(用指南或类似的东西的话)。任何帮助表示赞赏。

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

再次感谢大家,

达克玛斯塔

4

3 回答 3

0

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

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

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

于 2012-08-15T18:58:53.980 回答
0
txt = """
<....></...><...></...><OrderId>123456</OrderId><...></...>
<CustomerId>44444444</CustomerId><...></...><...></...>
"""

import re
pattern = "<(\w+)>(\d+)<"
print re.findall(pattern,txt)
#output  [('OrderId', '123456'), ('CustomerId', '44444444')]
于 2012-08-15T17:03:09.700 回答
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']
于 2012-08-15T17:06:49.917 回答