两个分隔符之间的字符

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&lt;signature&gt;.*?)命名捕获组签名 .*? 匹配任何字符(换行符除外) Quantifier: *? 在零次和无限次之间,尽可能少的次数, 按需扩展[懒惰] ["] 匹配下面列表中的单个字符 " 列表中的单个字符“字面意思(区分大小写)

【讨论】:

以上是关于两个分隔符之间的字符的主要内容,如果未能解决你的问题,请参考以下文章

如何在javascript中的两个分隔符之间拆分字符串?

如何多次替换两个分隔符/字符串之间的唯一字符串

如何在两个分隔符之间提取字符串[重复]

从两个分隔符之间删除字符

获取两个不同的开始和结束分隔符之间的所有子字符串

Pandas DataFrame - 在两个字符串之间提取字符串并包含第一个分隔符