1

我得到如下输入字符串:

A     BC Y

或者

A     BCY

关键是,它是基于位置的,即我必须将前 1 个字符解析为一个字符串,下一个 7 作为另一个字符串,下一个 1 作为另一个字符串,棘手的部分是最后一个字符串作为另一个字符串(在输入中是可选的)即输入行长度可以是 9 个字符或 10 个字符。我应该解析这个并得到 4 个字符串。

稍后我会将这些字符串放入数据库中并进行进一步处理。

我正在使用正则表达式

s/(.{1})(.{7})(.{1})(.{1})/

并将这些值复制到 4 个变量中。

但问题是它仅在行的长度正好是 10 个字符时才有效(当我们有最后一个字符时)。

当长度为 9 个字符(Y缺少最后一个可选字符)时,正则表达式与该行不匹配,因此不进行解析。

长话短说,如何修改regex以使最后 1 个字符可用于解析。

提前致谢。

PS:对于专家来说,这个问题可能听起来很微不足道,但是......

4

2 回答 2

1

通过阅读perlreperlretut手册页,您几乎可以肯定自己已经解决了这个问题。

正如其他人指出的那样,将?正则表达式原子标记为可选。您还可以通过省略所有{1}序列来简化您的正则表达式。

/(.)(.{7})(.)(.)?/
于 2013-10-23T15:12:49.947 回答
0

用于?可选(0 或 1)匹配

/(.{1})(.{7})(.{1})(.{1})?/

或者更简洁

/(.)(.{7})(.)(.)?/
于 2013-10-23T14:59:19.523 回答