我有一组文本说:
- 手提箱6 l
- 背包(28公斤)
- 行李袋6kg
- 钱包(3公斤)
- 行李袋[25l]
- 行李袋10l
我只想在数字、空格和任何特殊字符之前提取袋子的类型Like [or (, Like:
)- Suitecase
- 背包
- 行李袋 <
- 钱包/gh>
我尝试用不区分大小写来匹配非数字字符,但是我不知道如何排除特殊字符和空格。
(?i)(D*^)
有人能帮助我如何使用正则表达式吗?
您可以匹配不同的列出格式l
和kg
,有或没有()
和[]
,并捕获组中的袋的类型。
对于不区分大小写的匹配,您可以在regex前面加上(?i)
或在Python中使用re.I
标志。
^([A-Z].*?)s+(?:[d+(?:l|kg)]|(d+(?:l|kg))|d+(?:l|kg)b)
^
字符串 起始([A-Z].*?)
以字符a - z开始匹配,然后匹配尽可能少的字符s+
匹配1+空白字符(?:
备选项的非捕获组[d+(?:l|kg)]
在[...]
中匹配1+数字和|
或(d+(?:l|kg))
(...)
|
或d+(?:l|kg)b
匹配1+数字和l
或kg
l
或kg
中的任意一个)
关闭非捕获组
Regex演示
这个正则表达式将使您非常接近,只是可能捕获一些额外的空格,您可以使用trim()
:
来消除这些空格。b[a-zA-Z ]+b
这基本上是说找到不包含任何数字或特殊字符的最大的字母和空格组。
我相信这应该是你正在寻找的
[[:alpha:]]+(s[[:alpha:]]+)?(?!S*n)
[[:alpha:]]+
匹配任何一组字母(s[[:alpha:]]+)?
可选地匹配一个空格和一组字母(?!S*n)
这是一个负向前查找,如果向前查找有一个可选的非空格组,后面跟着一个新行,那么匹配将被丢弃。