我有一个URL,需要从中提取端口,用户名和密码,并将它们放入一个数组中。它看起来像是在跟随。
http://myproject.ddns.net:8080/get.php?username=9zu7T54rt6&password=1Tbliu49iH&type=m3u_plus&output=ts
我可以使用其他方法而无需替换或子串吗?
答案 0 :(得分:1)
C#中的一种方式
获取查询参数
var parsedQuery = HttpUtility.ParseQueryString("http://myproject.ddns.net:8080/get.php?username=9zu7T54rt6&password=1Tbliu49iH&type=m3u_plus&output=ts");
然后,下面会给出用户名
parsedQuery["username"]
密码:
parsedQuery["password"]
对于端口,您可以使用URI
:
Uri uri = new Uri("http://myproject.ddns.net:8080/get.php?username=9zu7T54rt6&password=1Tbliu49iH&type=m3u_plus&output=ts");
通过
获取端口uri.Port
创建阵列或使用俱乐部所需的任何内容。
答案 1 :(得分:0)
我不知道C#,但这里适用于Python。这非常简单,所以你应该能够转换。
:(?P<port>[0-9]+).*username=(?P<username>[a-zA-Z0-9]+).*password=(?P<password>[a-zA-Z0-9]+)
(?P&lt; foo&gt; bar)语法是一个命名的捕获组,当你提取它们时,它会将一个与'bar'模式匹配的变量放入一个名为'foo'的变量中。
答案 2 :(得分:0)
这是纯C#正则表达式的另一种可能的解决方案:
var url = "http://myproject.ddns.net:8080/get.php?username=9zu7T54rt6&password=1Tbliu49iH&type=m3u_plus&output=ts";
var urlRegex = new Regex(@"(?<=(http(s)?://)?\w+(\.\w+)*:)\d+(?=/.*)?");
var usernameRegex = new Regex(@"(?<=(\?|&)username=).*?(?=&|$)", RegexOptions.IgnoreCase);
var passwordRegex = new Regex(@"(?<=(\?|&)password=).*?(?=&|$)", RegexOptions.IgnoreCase);
Console.WriteLine(urlRegex.Match(url));
Console.WriteLine(usernameRegex.Match(url));
Console.WriteLine(passwordRegex.Match(url));
答案 3 :(得分:0)
如果有任何部分不改变,例如如果它总是相同的url你可以像这样替换它
string str = "http://myproject.ddns.net:8080/get.php?username=9zu7T54rt6&password=1Tbliu49iH&type=m3u_plus&output=ts"
str.Replace("http://myproject.ddns.net","");
这会让你“:8080 / get.php?username = 9zu7T54rt6&amp; password = 1Tbliu49iH&amp; type = m3u_plus&amp; output = ts”
没有什么可以阻止你用另一部分重复这个过程。
对于正则表达式,您可以使用Regex.Match https://msdn.microsoft.com/en-us/library/twcw2f1c(v=vs.110).aspx来获取所需的部分。
您可以使用“:\ d {4} /”来获取端口 - 您必须删除前导“:”并尾随“/”;这个“username = \ w * \&amp;”来获取用户名 - 您必须删除前导“username =”并尾随“&amp;”虽然;对于密码,您可以使用“password = \ w * \&amp;” - 您必须删除前导“password =”并尾随“&amp;”虽然。
如果你想试用正则表达式,这个网站https://regex101.com/非常好。