两个分隔符之间的字符
Posted
技术标签:
【中文标题】两个分隔符之间的字符【英文标题】:characters between two delimiters 【发布时间】:2012-06-23 08:40:06 【问题描述】:尝试将一个正则表达式放在一起,返回 _ 和 _$ 之间的字符串(其中 $ 是字符串的结尾)。
输入:
abc_def_ghi_
所需的正则表达式结果:
def_ghi
我已经尝试了很多组合,例如 thsi。
((([^_]*)1)[^_]*)_$
任何帮助表示赞赏。
注意:上面的正则表达式返回 abc_def,而不是所需的 def_ghi。
【问题讨论】:
【参考方案1】:所以是第一个 _
和最后一个 _
之间的所有内容(均不包括在内)?
那就试试
(?<=_).*(?=_$)
(希望你没有使用 javascript)
说明:
(?<=_) # Assert that the previous character is a _
.* # Match any number of characters...
(?=_$) # ... until right before the final, string-ending _
【讨论】:
对我来说这返回 "abc_, "_" 。 @sgtz:你需要使用Regex.Match()
方法,而不是Regex.Split()
。【参考方案2】:
您可以尝试利用运营商的贪婪来发挥自己的优势:
^.*?_(.*)_$
匹配从开头(非贪婪)到下划线的所有内容,从该下划线到字符串的结尾,它期望和下划线,然后是字符串的结尾,并在第一个捕获它匹配。
^ Beginning of string
.*? Any number of characters, at least 0
_ Anchor-tag, literal underscore
(.*) Any number of characters, greedy
_ Anchor-tag, literal underscore
$ End of string
【讨论】:
我不确定你为什么使用 .split()。使用与上述 RegEx 的常规匹配应该返回一个捕获的组,即您正在寻找的那个。【参考方案3】:我在一个更大的日志条目中搜索这个:
"threat_name":"PUP.Optional.Wajam"
格式用双引号将字段名称括起来,然后是冒号,然后是双引号中的值。
这是我最终避免标点符号破坏正则表达式的结果..
threat_name["][:]["](?P<signature>.*?)["]
(来自 regex101.com)
threat_name
与字符threat_name 逐字匹配(区分大小写)
["]
匹配下面列表中的单个字符
"
列表中的单个字符“字面意思(区分大小写)
[:]
匹配下面列表中的单个字符
:
文字字符:
["]
匹配下面列表中的单个字符
"
列表中的单个字符“字面意思(区分大小写)
(?P<signature>.*?)
命名捕获组签名
.*?
匹配任何字符(换行符除外)
Quantifier: *?
在零次和无限次之间,尽可能少的次数,
按需扩展[懒惰]
["]
匹配下面列表中的单个字符
"
列表中的单个字符“字面意思(区分大小写)
【讨论】:
以上是关于两个分隔符之间的字符的主要内容,如果未能解决你的问题,请参考以下文章