正则表达式,读取第一个单词并前进到下一行

时间:2015-06-11 15:38:36

标签: .net regex

我正在尝试创建循环文本的正则表达式:

  • 读取每行的第一个字符串/单词(字符串格式:1word / anotherword) 直到空格,逗号或标签;
  • 如果是,则忽略此单词的第一个字符 是一个数字;
  • 前进到下一行并应用前两条规则;

示例数据:

  1SMITH / JOHN Y 01B ABC CBA BOARD 1 18 123456 |
  1HILL / ANETH Y 24D ABC CBA BOARD 1 18 654321 |

到目前为止,我设法创建了单独的表达式:

  • 按换行符分割文字;
  • 读取第一个单词

但是我希望它能用一个表达式。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

在QT中试用,源自here且未经测试。

QRegExp rx("^\d?(.+?)[ ,\t].*$");
QString str = "1SMITH/JOHN Y 01B ABC CBA BOARD 1 18 123456 |\n1HILL/ANETH Y 24D ABC CBA BOARD 1 18 654321 |";
QStringList list;
int pos = 0;

while ((pos = rx.indexIn(str, pos)) != -1) {
    list << rx.cap(1);
    pos += rx.matchedLength();
}
// list: ["SMITH/JOHN", "HILL/ANETH"]

对于正则表达式,演示是here。 它的作用是:

  • ^\d?在行首
  • 匹配O或1个数字字符
  • (.+?)[ \t,]捕获任何文字,直到找到第一个空格,制表符或逗号
  • .*$匹配剩余的文字,直到行尾。