Regex 正在尝试在分隔符之间匹配字符
分隔符为Regex 正在尝试在分隔符之间匹配字符,regex,Regex,分隔符为-(在破折号前后加空格) 正文是:信息和电信-工资和工资-非管理。我试图匹配的文本是信息和电信,工资和工资,以及非管理 我找到的最接近的正则表达式是(\s-\s)?[\w\s]+(\s-\s)?,但不幸的是,匹配会产生非和管理作为单独的匹配 另一个例子是:信息和电信-工资和工资-非管理-1--2实际上,您需要一个正则表达式,它匹配单词字符,或紧靠-或行尾的空格或连字符 下面的正则表达式应该可以 (\w(?:[\w\s]|\w-\w)*)(?=(?:\s-\s)|$) 解释 (
-
(在破折号前后加空格)
正文是:信息和电信-工资和工资-非管理
。我试图匹配的文本是信息和电信
,工资和工资
,以及非管理
我找到的最接近的正则表达式是(\s-\s)?[\w\s]+(\s-\s)?
,但不幸的是,匹配会产生非和管理
作为单独的匹配
另一个例子是:信息和电信-工资和工资-非管理-1--2
实际上,您需要一个正则表达式,它匹配单词字符,或紧靠-
或行尾的空格或连字符
下面的正则表达式应该可以
(\w(?:[\w\s]|\w-\w)*)(?=(?:\s-\s)|$)
解释
( # matching group start
\w # match any word character once
(?: # start of a non-matching group
[\w\s] # match any word character or space character
| # OR
\w-\w # match any hyphen that's in between two word characters
)* # find this non-matching group zero or multiple times
) # matching group end
(?= # lookahead start
(?:\s-\s) # non-matching group for space hyphen space
| # OR
$ # end of string
) # lookahead end
事实上,您需要一个正则表达式,它匹配单词字符,或紧靠-
或行尾的空格或连字符
下面的正则表达式应该可以
(\w(?:[\w\s]|\w-\w)*)(?=(?:\s-\s)|$)
解释
( # matching group start
\w # match any word character once
(?: # start of a non-matching group
[\w\s] # match any word character or space character
| # OR
\w-\w # match any hyphen that's in between two word characters
)* # find this non-matching group zero or multiple times
) # matching group end
(?= # lookahead start
(?:\s-\s) # non-matching group for space hyphen space
| # OR
$ # end of string
) # lookahead end
您可以将空格与可选连字符-
匹配,也可以将连字符与可选空格-
匹配,但不能与-
匹配
\w+(?:(?: -*|-+ ?)\w+)*
模式匹配
\w+
匹配1个以上的单词字符
(?:
非捕获组
(?:-*|-+?)
匹配
和0+-
或匹配1+次-
和可选
\w+
匹配1个以上的单词字符
)*
关闭非捕获组并可选地重复
您可以将空格与可选连字符-
匹配,也可以将连字符与可选空格-
匹配,但不能与-
匹配
\w+(?:(?: -*|-+ ?)\w+)*
模式匹配
\w+
匹配1个以上的单词字符
(?:
非捕获组
(?:-*|-+?)
匹配
和0+-
或匹配1+次-
和可选
\w+
匹配1个以上的单词字符
)*
关闭非捕获组并可选地重复
用“-”分隔字符串不是更好吗?@JohnyL,拆分函数对于单字符分隔符可能很容易,但对于像“-”这样的模式(破折号前后都有空格)就不容易了。用“-”分隔字符串不是更好吗?@JohnyL,拆分函数对于单字符分隔符可能很容易,但对于诸如“-”之类的模式(在破折号之前和之后都有空格)就不容易了。尽管我喜欢您粘贴的第一个正则表达式的简单性。使用以下示例数据进行测试时:信息和电信-工资和工资-非管理-1--2
,生成1和2作为单独的匹配项。@Vivek例如,您可以重复-like\w+(?:(?:-*|-+)\w+*
查看您刚才提供的解决方案。如果您想编辑您的答案以粘贴此新答案,请点击它。通过查看最内部的非捕获组:(?:-*|-+?)
我观察到空间不能用“\s”速记交替表示。尽管我喜欢您粘贴的第一个正则表达式的简单性。使用以下示例数据进行测试时:信息和电信-工资和工资-非管理-1--2
,生成1和2作为单独的匹配项。@Vivek例如,您可以重复-like\w+(?:(?:-*|-+)\w+*
查看您刚才提供的解决方案。如果您想编辑您的答案以粘贴此新答案,请点击它。通过查看最内部的非捕获组:(?:-*|-+?)
我观察到空间不能用“\s”速记交替表示。当使用以下示例数据进行测试时:信息和电信-工资和工资-非管理-1--2
,生成1和2作为单独的匹配项。当使用以下示例数据进行测试时:信息和电信-工资和工资-非管理-1--2
,生成1和2作为单独的匹配项。