首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Regex -如何匹配单个字符而不包括连续两个字符?

Regex -如何匹配单个字符而不包括连续两个字符?
EN

Stack Overflow用户
提问于 2018-12-21 00:12:30
回答 2查看 126关注 0票数 0

我试图使用正则表达式匹配以下示例中的属性名称("SUP“、"QUANTITY”、"MOD/REF"):

SUP : K16518-1,数量:2件// MOD/REF: 16-1P1-0612

注意:

  • 属性名称后面总是有':‘字符
  • 属性可以由多个单词组成,可以用空格("SUP NR")或/ ("MOD/REF")分隔。
  • 在开头有一个空格字符(在"SUP NR“之前)

我试图使用以下正则表达式来完成此操作:

代码语言:javascript
运行
复制
(?<=\s)[a-zA-Z\s/]+:

我使用的(?<=\s)负面外观,因为在属性名称之前总是有一个“空格”。

如果不是双字符//字符,它就能工作,这当然与字符集中的'/‘字符匹配。是否有一种方法可以在字符集中只包含单个“/”字符,而不包括“//”双字符?(也许还有一种更优雅的方法来解决这个问题?)

编辑:注意,属性也可能包含两个以上的单词。此外,所选的属性名称只是示例,它也适用于不同的名称。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-21 00:28:53

您可以使用这个regex:

代码语言:javascript
运行
复制
\s([a-zA-Z]+(?:[/\s][a-zA-Z]+)*):

它查找前面是空格的单词,后面是分隔符的可选组(空格或/),另一个单词后面是:。对于您的数据组1是SUP NRQUANTITYMOD/REF

基于regex101的演示

对于python,您可以这样使用这个regex:

代码语言:javascript
运行
复制
import re
string = " SUP NR: K16518-1, QUANTITY: 2 PIECES// MOD/REF: 16-1P1-0612"
regex = re.compile('\s([a-zA-Z]+(?:[/\s][a-zA-Z]+)*):')
print regex.findall(string)

输出:

代码语言:javascript
运行
复制
['SUP NR', 'QUANTITY', 'MOD/REF']

rextester演示

票数 1
EN

Stack Overflow用户

发布于 2018-12-21 00:38:58

你不需要看后面的东西。你也可以说得更具体些。

试试这个:

代码语言:javascript
运行
复制
[a-zA-Z]+([ /][a-zA-Z]+)*(?=:)

现场演示

顺便说一句,你后面的表情不是消极的,而是正面的--消极的看后面使用语法(?<!...)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53877690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档