Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
Regex 正则表达式-从给定字符串中提取子字符串_Regex_Xpath_Substring - Fatal编程技术网

Regex 正则表达式-从给定字符串中提取子字符串

Regex 正则表达式-从给定字符串中提取子字符串,regex,xpath,substring,Regex,Xpath,Substring,我这里有一个字符串,这是一个字符串:AAA123456789 因此,这里的想法是使用regex提取字符串AAA123456789 我将此与X路径合并 注意:如果有这方面的帖子,请带我去 我想,没错,我应该子字符串(myNode,[^AAA\d+{9}]) 我对正则表达式部分不是很确定 这个想法是在遇到“AAA”时提取字符串,并且只有数字,只有9个后续数字。首先,我很确定您不是有意使用[^…]。它定义了一个“负字符类”,即您当前的正则表达式说,“给我一个不是以下字符之一的字符:A012345678

我这里有一个字符串,
这是一个字符串:AAA123456789

因此,这里的想法是使用regex提取字符串
AAA123456789

我将此与X路径合并

注意:如果有这方面的帖子,请带我去

我想,没错,我应该
子字符串(myNode,[^AAA\d+{9}])

我对正则表达式部分不是很确定


这个想法是在遇到“AAA”时提取字符串,并且只有数字,只有9个后续数字。

首先,我很确定您不是有意使用
[^…]
。它定义了一个“负字符类”,即您当前的正则表达式说,“给我一个不是以下字符之一的字符:
A0123456789{}
”。很明显,你的意思是“AAA(\d{9})”。现在,根据,XPath确实支持捕获组和反向引用,所以请选择:

"AAA(\d{9})"
并提取第一个捕获组
$1
,或:

"(?<=AAA)\d{9}"
(?你能试试这个吗:

A{3}(\d{9})


纯XPath解决方案

substring-after('This is a string: AAA123456789', ': ')
AAA123456789
tokenize('This is a string: AAA123456789 but not an double',
              ' '
              )[starts-with(., 'AAA')]
产生

substring-after('This is a string: AAA123456789', ': ')
AAA123456789
tokenize('This is a string: AAA123456789 but not an double',
              ' '
              )[starts-with(., 'AAA')]
XPath 2.0解决方案

substring-after('This is a string: AAA123456789', ': ')
AAA123456789
tokenize('This is a string: AAA123456789 but not an double',
              ' '
              )[starts-with(., 'AAA')]
或:

或:


好的,在参考了这里优秀人士的答案和评论后,我用我选择的解决方案总结了我的发现

concat(“AAA”,子字符串(在(,“AAA”)之后的子字符串),1,9))

所以我首先,在字符串后面加上“AAA”“由于第一个参数的长度为1到9…其他任何参数都会被忽略。由于我使用AAA作为引用,因此不会出现这种情况,因此,将AAA连接到值的前面。这意味着我将获得AAA后的前9位数字,然后在前面concat AAA,因为它是静态数据

这将允许数据是正确的,无论其他贡献是什么

但是我喜欢@Dimitre的regex。替换部分。标记化不是因为没有空间作为参数。用regex替换,这也很好。谢谢


还要感谢你们这些家伙……

你们尝试了什么?你们必须至少有一个你们尝试过的正则表达式不起作用(除非你们只是来了一个期望我们为你们做工作的地方……)字符串是否始终具有相同的格式?并且您是否始终具有精确的九位数字?因为如果是这样,您不需要正则表达式,只需要简单的子字符串处理。几乎正确,只需使用
\d{9}
+
{9}
都是重复运算符)。您使用的是XPath 2,对吗?不是XPath 1。字符串的格式并不总是相同的。请参阅,它可以是“这是一个字符串:AAA123456789,但不是双精度”。所以我不能真正使用普通xpath。所以这里的完全证明解决方案是将字符串AAA123456789作为子字符串。我尝试了上面显示的方法。可能是错误的。另一种方法就像Jere提到的,普通但不是完全证明方法。子字符串后面(大写(myNode),“string”)。再说一遍,这是不合适的。谢谢希·迪米特,你能解释一下替换部分吗。这就是我所理解的,我想,用$1替换除*(A+\d+.*$之外的所有内容…这是正确的吗…但是$1做什么…@Vincent,这意味着:替换整个字符串(如果它包含
A+\d+
格式的子字符串)仅包含(第一对)括号内的子表达式。
replace
的第三个参数必须包含一个字符串,指定替换每个目标的内容。它允许按数字(位置)进行“捕获引用”。有关
replace()
here:Sir,是否有一个XPath问题您还没有回答,或者您不知道答案?:-)@AlptiginJalayr,可以立即看出我还没有尝试回答所有XPath问题。:)