需要帮助提取文本,同时排除其他字符

时间:2015-09-17 07:33:37

标签: regex regex-negation regex-lookarounds

这里是字符串:

Acanthite (Y: 1855) 02.BA.35 [18] [19] [20]
(IUPAC: Disilver sulfide)
Acetamide (1974-039) 10.AA.20 [21] [22] [23]
(IUPAC: Acetic acid amide)
Achalaite (2013-103) 04.?? [24] [no] [no]
Achavalite (Y: 1939

这是我的正则表达式:

([^B35\[1-9\] 0:Y\(\)\n-.?])+

我也试过了:

^[a-z]+

我想要输出的多行是: (没有使用特定的编程语言)

Acanthite
Acetamide
Achalaite
Achavalite

3 个答案:

答案 0 :(得分:1)

由于你有一个多行字符串作为输入,除了拉丁字母开头的行上的第一个单词之外你需要删除所有内容,你可以使用以下技巧:

  • 匹配并捕获一行中的第一个单词(因此,您需要GDID int FOREIGN KEY REFERENCES Groups(DepartmentID), PDID int FOREIGN KEY REFERENCES Person(DepartmentID), CHECK (GDID = PDID), UNIQUE ("TaskType", "GroupType", "WeekNr", "Yearcount"), FOREIGN KEY (TaskType) REFERENCES TaskType(TaskType), FOREIGN KEY (PersonID) REFERENCES Person(ID), FOREIGN KEY (GroupType) REFERENCES Groups(GroupType) 字符串起始锚点以及^多行修饰符)
  • 匹配该行的其余部分以及所有不以拉丁字母开头的子序列行。

正则表达式是:

/m

请参阅the demo

(?im)^([a-z]+).*(\r?\n[^a-z].*)* (?im)多行和m ignorecase标志的内联表示。

正则表达式分解:

  • i - 行首
  • ^ - 一个或多个拉丁字母
  • ([a-z]+) - 行的其余部分
  • .* - 0个或更多个序列...
    • (\r?\n[^a-z].*)* - 换行符
    • \r?\n - 拉丁字母以外的符号
    • [^a-z] - 行的其余部分

请注意,要匹配并删除字符串开头的非欢迎行,您需要将.*子模式添加到开头:

(?:[^a-z].*\r?\n)*

请参阅another demo

答案 1 :(得分:0)

只需添加不区分大小写的修饰符。或者您需要在角色类中包含A-Z

/^[a-z]+/im

(?im)^[a-z]+

(?m)^[a-zA-Z]+

答案 2 :(得分:0)

使用此模式

A \瓦特* E \ S

请参阅演示:https://regex101.com/r/hH8xD4/1