Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从C中的字符串中获取特定文本#_C# - Fatal编程技术网

C# 如何从C中的字符串中获取特定文本#

C# 如何从C中的字符串中获取特定文本#,c#,C#,我试图从他们的类型名中提取配置文件名。例如,输入类型名称如下所示: “ST230X52”;“S310X74”;“WT305X62.5”;“305x457x127UBT” 那么,我如何获得以下输出: “ST”;“S”;“WT”;“UBT”这个小程序能解决你的问题吗 var str = "ST230X52" let noncode = Set<Character>(arrayLiteral: "0","1","2&qu

我试图从他们的类型名中提取配置文件名。例如,输入类型名称如下所示:

“ST230X52”;“S310X74”;“WT305X62.5”;“305x457x127UBT”

那么,我如何获得以下输出:
“ST”;“S”;“WT”;“UBT”

这个小程序能解决你的问题吗

var str = "ST230X52"
let noncode = Set<Character>(arrayLiteral: "0","1","2", "3", "4", "5", "6", "7", "8", "9", "X", "x")
var profileName = ""
    if !noncode.contains(letter) {
        profileName += String(letter)
    }
}
print(profileName)
var str=“ST230X52”
设非编码=集合(数组并行:“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“X”、“X”)
var profileName=“”
如果!非代码.包含(字母){
profileName+=字符串(字母)
}
}
打印(档案名称)

这个小程序能解决您的问题吗

var str = "ST230X52"
let noncode = Set<Character>(arrayLiteral: "0","1","2", "3", "4", "5", "6", "7", "8", "9", "X", "x")
var profileName = ""
    if !noncode.contains(letter) {
        profileName += String(letter)
    }
}
print(profileName)
var str=“ST230X52”
设非编码=集合(数组并行:“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“X”、“X”)
var profileName=“”
如果!非代码.包含(字母){
profileName+=字符串(字母)
}
}
打印(档案名称)

我认为最好是使用正则表达式,使用下面的代码:

注意:我这样做就像示例一样:字符大小写,开头和结尾

公共静态字符串GetProfileName(字符串输入)
{
列表结果=新列表();
bool startFinding=false;
foreach(input.ToCharArray()中的字符c)
{
//匹配A到Z是否为大写?
if(Regex.IsMatch(c.ToString(),“[A-Z]”)
{
结果.添加(c);
startFinding=true;
}
else if(开始查找)
{
//端环
打破
}
}
返回新字符串(result.ToArray());
}
解释一下这个方法 变量:

首先,我将
List
定义为变量,因为它将是结果

startFinding
定义方法是否开始从A-Z查找字符

方法:

我在每个字符中都做了循环(
foreach

如果字符来自大写的
A-Z
(使用
Regex
):

将此字符添加到
result

startFinding
更改为
true

如果
startFinding
true

结束此循环(
中断


结果:
我认为最好的方法是使用正则表达式,使用下面的代码:

注意:我这样做就像示例一样:字符大小写,开头和结尾

公共静态字符串GetProfileName(字符串输入)
{
列表结果=新列表();
bool startFinding=false;
foreach(input.ToCharArray()中的字符c)
{
//匹配A到Z是否为大写?
if(Regex.IsMatch(c.ToString(),“[A-Z]”)
{
结果.添加(c);
startFinding=true;
}
else if(开始查找)
{
//端环
打破
}
}
返回新字符串(result.ToArray());
}
解释一下这个方法 变量:

首先,我将
List
定义为变量,因为它将是结果

startFinding
定义方法是否开始从A-Z查找字符

方法:

我在每个字符中都做了循环(
foreach

如果字符来自大写的
A-Z
(使用
Regex
):

将此字符添加到
result

startFinding
更改为
true

如果
startFinding
true

结束此循环(
中断


结果: 我是这样做的:

public static string Extract(string text) =>
    Regex.Matches(text, @"[^\d.]+").Cast<Match>()
         .FirstOrDefault(match => match.Value.ToLower() != "x")?.Value;
公共静态字符串提取(字符串文本)=>
Regex.Matches(文本,@“[^\d.]+”).Cast()
.FirstOrDefault(match=>match.Value.ToLower()!=“x”)?.Value;
首先,我找到一系列不包含数字或小数的字符的匹配项。然后我返回第一个这样的运行,它不仅仅是一个“x”(不区分大小写)。如果不存在匹配项,则返回null。

我是这样做的:

public static string Extract(string text) =>
    Regex.Matches(text, @"[^\d.]+").Cast<Match>()
         .FirstOrDefault(match => match.Value.ToLower() != "x")?.Value;
公共静态字符串提取(字符串文本)=>
Regex.Matches(文本,@“[^\d.]+”).Cast()
.FirstOrDefault(match=>match.Value.ToLower()!=“x”)?.Value;

首先,我找到一系列不包含数字或小数的字符的匹配项。然后我返回第一个这样的运行,它不仅仅是一个“x”(不区分大小写)。如果不存在匹配项,则返回
null

虽然这个问题不会缺少答案,但我想我应该再添加一个:)

这个问题描述了领域特定类型的一个很好的用例-包含产品类型的
字符串在OP的领域上下文中实际上根本不是字符串。考虑下面的类(正则表达式匹配从Wyk的答案无耻地被盗):

域特定类型
class产品类型
{
私有静态正则表达式profileNameRule=新正则表达式(@“[^\d.]+”);
公共字符串名称{get;private set;}
公共字符串ProfileName{get;private set;}
私有字符串提取器配置文件名(字符串文本)
=>profileNameRule.Matches(文本)
.Cast()//此调用在.NET Framework上是必需的,但在.NET Core上不是必需的
.FirstOrDefault(x=>x.Value.ToLower()!=“x”)?.Value;
私有产品类型(字符串名称)
=>(名称,档案名称)=(名称,提取档案名称(名称));
公共静态隐式运算符ProductType(字符串名称)
=>新产品类型(名称);
}
说明: 该类有一个私有构造函数,因此创建其实例的唯一方法是使用来自
字符串
的隐式转换,而隐式转换在可能失败的情况下可能不好,在这种情况下,转换总是成功的(您可能会得到一个无效的产品类型-如果输入的字符串首先表示一个无效的产品类型,但它不会失败)

定义表示配置文件名称的规则的
Regex
对象是
static
,以避免不必要的分配;配置文件名称是c