提问者:小点点

如何在C#中检查字符串的特定部分后的字符?


我试图在字符串中找到一个特定的值,然后检查值后面的字符。

我得到了第一部分,可以找到我需要的值,但我想检查每一个值后,我发现它前面的字符串中的十个字符中是否有任何一个是数字。

这是我到目前为止得到的第一部分:

     public class Text_Value : MonoBehaviour
 {  
     [SerializeField]
     private TMP_Text Text;
 
     public List<string> Values = new List<string>();
 
     private int ChestCircumference;
 
     private int BodyHeight;
 
     private int HighHipCircumference;
 
     private int BellyCircumference;
 
     private int CharacterIndex = 0;
 
 
     // Start is called before the first frame update
     void Start()
     {
         StartCoroutine(GetValues());
     }
 
     // Update is called once per frame
     void Update()
     {
         
     }
 
 
     IEnumerator GetValues()
     {
         if (Text.text == "No Data")
         {
             yield return new WaitForSeconds(0.1f);
 
             Debug.Log("Text Value Finder: Wating For Text Data");
 
             StartCoroutine(GetValues());
         }
         else if (Text.text != "No Data")
         {
             foreach (string value in Values)
             {
                 if (Text.text.Contains(value))
                 {
                     Debug.Log("Value Found: " + value);
                 }
                 else if (!Text.text.Contains(value))
                 {
                     Debug.Log("Missing Value: " + value);
                 }
             }
         }
     }
 
 }

我想我需要在Foreach循环中使用一个循环,它将遍历接下来的十个字符,但不确定如何做到这一点。

字符串的一个示例是:

“领围”:39.102776,“颈底围”:42.982479”


共1个答案

匿名用户

如上所述,您可以使用Regex。匹配等。

var matches = Regex.Matches(Text.text, "\"(.*?)\":(.*?)(?=,|$)");
foreach(var match in matches)
{
    var key = match.Groups(1);
    var valueString = match.Groups(2);
    if(float.TryParse(valueString, out var value)
    {
        Debug.Log($"Found match for {key} with value = {value}");
    }
}

参见Regex示例和解释