【发布时间】:2019-02-02 02:05:50
【问题描述】:
我有一些以DD_filename 开头的字符串。
如何使用正则表达式提取_ 之前的字符。
我尝试使用from here 进行学习,因为给定a.b 将检索从a 开始并以b 结束的字符
我尝试过类似的^._,但它不适合我。
【问题讨论】:
-
您可以使用正则表达式...但似乎更有可能拆分它会更容易和高效。
标签: regex
我有一些以DD_filename 开头的字符串。
如何使用正则表达式提取_ 之前的字符。
我尝试使用from here 进行学习,因为给定a.b 将检索从a 开始并以b 结束的字符
我尝试过类似的^._,但它不适合我。
【问题讨论】:
标签: regex
^._ 只会匹配_ 之前的一个字符。试试这个模式:
^.*?(?=_)
【讨论】:
^.*(?=_)有什么区别?另外,如果有多个下划线,使用[^_]*或.*?而不是.*会更好吗?
从字符串的开头开始,捕获所有非下划线字符:
"^[^_]*"
第一个^(插入符号)字符表示匹配从字符串的开头开始。括号允许您定义一组可能的字符(字符类)。第二个^ 字符表示“不是”。所以字符类是“非下划线”。星星的意思是“零或更多”。所以用简单的英语:“从字符串的开头匹配零个或多个非下划线字符”。
【讨论】:
你可以试试
.*?(?=_)
. 匹配任何字符,*? 是 reluctant quantifier。 (?=_) 是 positive lookahead 以确保我们的匹配后跟 _。
如果您只想提取出现在字符串开头的字符,您可以添加^ 锚点:^.*?(?=_)。 ^ 匹配字符串中第一个字符之前的位置。
【讨论】:
只捕获所有不是下划线的字符:
"[^_]*"
【讨论】:
^ 在括号中表示“不是”)重复 0 次或更多次(即 * ).
Regular Expression to get all characters before "-"
查看@stema 的回答。他给出了四种方法来做到这一点,但第一种可能是最好的。
Match result = Regex.Match(text, @"^.*?(?=-)");
Console.WriteLine(result);
【讨论】: