我有一组结果,我想用Regex解析,我似乎无法找到一个有效的表达式。在txt文件的每一行中,有2个条目,每个条目包含最多100个数量,后跟不同长度和空格的项目名称。
示例:
7 BALLS OF STRING 13 CARDBOARD BOXES
14 ROCKS 12 PENCILS
我想将第一个条目与第1组中的数量相匹配,将第二个条目与第2组中的数量相匹配。
答案 0 :(得分:0)
您可以使用以下正则表达式模式并在读取文件时使用它,每行一行:
^(\d*\s[A-Z\s]*)\s(\d*\s[A-Z\s]*)$
以下是一个实例:https://regex101.com/r/18dege/1
这里有一些细节:
^
匹配字符串的开头,$
结尾\d*
匹配任意数字(0或更多)的贪婪数字字符(等于[0-9]*
)\s
匹配空格字符(例如标签,空格等)[A-Z\s]*
匹配任何数字(0或更多)的大写字符和空白贪婪()
创建一个匹配组(以提取字符串的某些部分)根据下面的评论,大写字母后面可以跟小写字母,不应该匹配。一个例子是:
7 BALLS OF STRING 13 CARDBOARD BOXES
14 ROCKS 12 PENCILS
18 TABLES 3 BLANKETS sewn with patches
要匹配此模式,您可以使用以下正则表达式:
^(\d*\s[A-Z\s]*?)[a-z\s]*\s(\d*\s[A-Z\s]*?)[a-z\s]*$
作为上述模式的更新,我添加了以下内容:
[a-z\s]*
匹配小写字符串(\d*\s[A-Z\s]*?)
我添加了问号?
,以使匹配非贪婪。这可以防止将大写和小写部分之间的空白添加到匹配组。现在需要在模式的末尾添加字符串结尾$
,否则,第二组将不匹配足够的字符。以下是一个实例:https://regex101.com/r/18dege/2