0

我在文件中有一行如下所示:

Location### Location### #

其中 Location 是一个字符串,表示一个城市,其中空格是 +'s(如 "St.+Louis,+MO"),而 #'s 是数字。我正在尝试使用以下正则表达式模式捕获位置和数字(代表此网络拓扑文件中的唯一节点 ID):

START "([A-Za-z,+.]+)([0-9]+)" SPACE "([A-Za-z,+.]+)([0-9]+)" SPACE "([0-9.]+)" MAYSPACE END

使用 C++ 正则表达式库(在 Ubuntu Linux 上)。宏被正确定义为匹配但不捕获空格(MAYSPACE 匹配 0 个或更多空白字符)。

我遇到的问题是数字组完全是空的!如果我将此正则表达式放入 sed:

sed -rn 's/^([A-Za-z.+,]+)([0-9]+)/\1 \2/p' rocketfuel/weights/6461/latencies.intra

它完全按预期工作,并捕获了城市名称和节点 ID!此外,如果我尝试以下匹配:

START "([A-Za-z,+.]+).([0-9]+)" SPACE "([A-Za-z,+.]+).([0-9]+)" SPACE "([0-9.]+)" MAYSPACE END

节点 ID 将被捕获,但显然缺少第一位!我曾尝试将 \B 非单词边界锚放在那里,但没有运气......

有没有其他人遇到过不匹配的相邻组的这个问题?有人对如何修复它有任何建议吗?这似乎是实际 C++ 库的一个错误......

我试图避免使用 Boost 或其他外部库,所以现在我将使用 sed 在位置和节点 ID 之间添加一个空格,因为那时我可以很好地解析所有内容。

4

0 回答 0