C# 左右字符串检测算法及操作

C# 左右字符串检测算法及操作,c#,java,regex,string,C#,Java,Regex,String,我正在寻找一种机制来检测给定字符串的最小值和唯一值左右字符串。考虑下面的文本: <button id="allow" type="submit" class="button-big" name="allow" value="93db44648ab3607b10e600eaf796c794" tabindex="4"> 我需要得到有价值的东西。因此,如果我决定选择子字符串,我将使用name=“allow”value=“作为左字符串和”作为右字符串(基于整个html数据的唯一

我正在寻找一种机制来检测给定字符串的最小值唯一值左右字符串。考虑下面的文本:

   <button id="allow" type="submit" class="button-big" name="allow" value="93db44648ab3607b10e600eaf796c794" tabindex="4">

我需要得到有价值的东西。因此,如果我决定选择
子字符串
,我将使用
name=“allow”value=“
作为左字符串和
作为右字符串(基于整个html数据的唯一性)及其相对索引。但我使用的工具是检测唯一但足够小的左字符串是
w”value=“

我的问题是如何找到这个?因为我没有工具的来源,所以我无法检测到它并找到它

请不要向我推荐C#中的HAP或任何html库,因为上面的html代码只是一个易于理解的示例。我有其他类型的数据

任何C#或java代码片段都很好

编辑: 我正在处理的数据是非html的,非标准的,但团队描述的东西。由于它的性质,它也需要用Java进行编码。因此,我不能考虑HtmlAgilityPack


我想强调的是尽可能少的字符串,而不是识别唯一模式的所有工作可能性。

从上面的示例中可以看出,您正在尝试解析HTML


为此,我建议使用,而不是尝试自己做。

好的,从你最近的评论中,我尝试猜测你想做什么,希望能给你一个正确方向的指针

一些用户选择一些文本并说“自动为我检测最小分隔符”。因此,您的输入是整个文本(类型为
String
)以及用户选择的开始和结束索引(类型为
int
)的selectionStart和selectionEnd)。您期望的输出将是两个字符串,它们唯一地标识整个文本中选择的开始和结束(让我们称它们为startDelimiter和endDelimiter),这样

text.indexOf(startDelimiter, 0) + startDelimiter.length() == selectionStart

两者都成立

找到startDelimiter的一般方法是从selectionStart-n到selectionStart构建子字符串,从n=1开始,然后增加n,直到上面的第一个表达式为真。对于endDelimiter也可以这样做,但是您可以构建从selectionEnd+1到selectionEnd+n+1的子字符串,并增加n直到第二个表达式为true

如果分隔符很大,则速度可能会变慢。在最坏的情况下,selectionStart之前的输入文本的整个部分将是startDelimiter,您只能在selectionStart-1迭代之后找到它


因此,一个可能的改进是使用二进制搜索方法并在每次迭代中使用双n,直到找到有效的分隔符,然后继续以相同的方式减少分隔符,直到子字符串不再是有效的分隔符。前面的子字符串是您的最小分隔符。

为什么不给出一个输入和输出示例?示例是什么意思?我在上面的html表单中给出了这个值。在我看来,左边的最小字符串是ue=“而不是您开始的w”value=“您要查找的算法的输入应该是什么?是左边和右边最小分隔符之间的字符串(例如“93db44648ab3607b10e600eaf796c794”)?如果是这样,您想用找到的最小分隔符做什么?您已经知道它们之间的字符串,可能很难保证在一个文档中找到的最小分隔符也能在另一个文档中工作。我想您确实需要提供更多关于您试图解决的实际问题的详细信息和一些实际示例。@MatthewWatson-它是w“值=“因为我提到有必要对整个数据字符串进行处理。我在最后一行中明确指出,这只是一个示例,以便更容易理解。我有一组不同的数据,HAP什么都做不了。你举了一个例子,这个解决方案对于这个例子来说似乎很好,所以我建议你对你正在处理的输入类型给出一个更好的解释。我将应用代码并返回状态。谢谢你的构想。
text.indexOf(endDelimiter, selectionStart) - 1 == selectionEnd