去掉字符串最右边的数字或字母

Posted

技术标签:

【中文标题】去掉字符串最右边的数字或字母【英文标题】:strip out digits or letters at the most right of a string 【发布时间】:2012-01-24 13:09:51 【问题描述】:

我有一个文件名:kjrjh20111103-BATCH2242_20111113-091337.txt

我只需要091337,而不是 txt 或 - 我怎样才能做到这一点。它不必是 6 个数字,它可以或多或少,但总是在“-”之后以及 .“doc”或 .“txt”之前的最后一个数字

【问题讨论】:

使用正则表达式 (\d+)\..+$ 这个模式应该适合你 @Ramhound,我猜他们知道这一点,因为它被标记为 regex 【参考方案1】:

您可以使用正则表达式或简单的字符串操作来执行此操作。对于后者:

int lastDash = text.LastIndexOf('-');
string afterDash = text.Substring(lastDash + 1);
int dot = afterDash.IndexOf('.');
string data = dot == -1 ? afterDash : afterDash.Substring(0, dot);

个人我觉得这比正则表达式更容易理解和验证,但你的里程可能会有所不同。

【讨论】:

我可能会建议独立于从名称字符串中拆分数字来解析文件名 - 仅通过解析文件名就有相当大的娱乐潜力。【参考方案2】:
String fileName = kjrjh20111103-BATCH2242_20111113-091337.txt;
String[] splitString = fileName.Split ( new char[]  '-', '.'  );
String Number = splitString[2];

【讨论】:

数字应该是一个字符串,否则他们的例子091337会被解析为91337【参考方案3】:

正则表达式:.*-(?<num>[0-9]*). 应该可以完成这项工作。 num capture group 包含你的字符串。

【讨论】:

【参考方案4】:

正则表达式是:

string fileName = "kjrjh20111103-BATCH2242_20111113-091337.txt";
string fileMatch = Regex.Match(fileName, "(?<=-)\d+", RegexOptions.IgnoreCase).Value;

【讨论】:

【参考方案5】:
        String fileName = "kjrjh20111103-BATCH2242_20111113-091337.txt";
        var startIndex = fileName.LastIndexOf('-') + 1;
        var length = fileName.LastIndexOf('.') - startIndex;
        var output = fileName.Substring(startIndex, length);

【讨论】:

以上是关于去掉字符串最右边的数字或字母的主要内容,如果未能解决你的问题,请参考以下文章

从字符串中只提取最右边的 n 个字母

如何用js把字符串中的字母和数字拆分开?

把一个字符串里的所有数字去掉.只留下字母

shell把字符串中的字母去掉,只保留数字

Flutter——限制TextField只能输入汉字或英文字母或数字,并限制输入最多中文5字符,英文10字符

oracle 去掉字符,剩下数字