【发布时间】:2012-06-23 08:40:06
【问题描述】:
尝试将一个正则表达式放在一起,返回 _ 和 _$ 之间的字符串(其中 $ 是字符串的结尾)。
输入:
abc_def_ghi_
所需的正则表达式结果:
def_ghi
我已经尝试了很多组合,例如 thsi。
((([^_]*){1})[^_]*)_$
任何帮助表示赞赏。
注意:上面的正则表达式返回 abc_def,而不是所需的 def_ghi。
【问题讨论】:
标签: regex
尝试将一个正则表达式放在一起,返回 _ 和 _$ 之间的字符串(其中 $ 是字符串的结尾)。
输入:
abc_def_ghi_
所需的正则表达式结果:
def_ghi
我已经尝试了很多组合,例如 thsi。
((([^_]*){1})[^_]*)_$
任何帮助表示赞赏。
注意:上面的正则表达式返回 abc_def,而不是所需的 def_ghi。
【问题讨论】:
标签: regex
所以是第一个 _ 和最后一个 _ 之间的所有内容(均不包括在内)?
那就试试
(?<=_).*(?=_$)
(希望你没有使用 JavaScript)
说明:
(?<=_) # Assert that the previous character is a _
.* # Match any number of characters...
(?=_$) # ... until right before the final, string-ending _
【讨论】:
Regex.Match()方法,而不是Regex.Split()。
您可以尝试利用运营商的贪婪来发挥自己的优势:
^.*?_(.*)_$
匹配从开头(非贪婪)到下划线的所有内容,从该下划线到字符串的结尾,它期望和下划线,然后是字符串的结尾,并在第一个捕获它匹配。
^ 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
【讨论】:
我在一个更大的日志条目中搜索这个:
"threat_name":"PUP.Optional.Wajam"
格式用双引号将字段名称括起来,然后是冒号,然后是双引号中的值。
这是我最终避免标点符号破坏正则表达式的结果..
threat_name["][:]["](?P<signature>.*?)["]
(来自 regex101.com)
threat_name 与字符threat_name 逐字匹配(区分大小写)["] 匹配下面列表中的单个字符" 列表中的单个字符“字面意思(区分大小写)[:] 匹配下面列表中的单个字符: 文字字符:["] 匹配下面列表中的单个字符" 列表中的单个字符“字面意思(区分大小写)(?P<signature>.*?)命名捕获组签名.*? 匹配任何字符(换行符除外)Quantifier: *? 在零次和无限次之间,尽可能少的次数,
按需扩展[懒惰]["] 匹配下面列表中的单个字符" 列表中的单个字符“字面意思(区分大小写)【讨论】: