正则表达式包括字符串值而不是子字符串值
Regex to include the string values not substring values
我有以下字符串:
name:ABC;
username:XYZ;
我想从字符串中删除名称值 ABC
,因此我使用以下正则表达式:
((?<=name))(.*?)(?=;)
它成功地选择了 name
值,但问题是它也选择了 username
值。
我只想删除 name
个值,而不是 username
个值。
我该怎么做?
解决方案:
** Avinash
和 Bohemian
对这个问题的回答都是正确的。
通过 Avinash
答案,我们可以排除所有包含 name
作为子字符串的单词,而通过 Bohemian
答案,我们可以排除特定单词。
在name
之前使用单词边界\b
。
(?<=\bname:)(.*?)(?=;)
或
(?<=\bname:)[^;]*
修改你的正则表达式,你可以结合两种后视,一种是正面的,一种是负面的:
(?<!username)(?<=name).*?(?=;)
另请注意删除了不必要的括号。
Avinash 的回答可能是我在这种情况下会使用的,但我想我会以这种方式显示以防万一 \b
对未来的访问者不起作用,例如名称以 [=12 结尾的所有数据=] (streetname
, cityname
, 等等) 除了 username
.
我有以下字符串:
name:ABC;
username:XYZ;
我想从字符串中删除名称值 ABC
,因此我使用以下正则表达式:
((?<=name))(.*?)(?=;)
它成功地选择了 name
值,但问题是它也选择了 username
值。
我只想删除 name
个值,而不是 username
个值。
我该怎么做?
解决方案:
** Avinash
和 Bohemian
对这个问题的回答都是正确的。
通过 Avinash
答案,我们可以排除所有包含 name
作为子字符串的单词,而通过 Bohemian
答案,我们可以排除特定单词。
在name
之前使用单词边界\b
。
(?<=\bname:)(.*?)(?=;)
或
(?<=\bname:)[^;]*
修改你的正则表达式,你可以结合两种后视,一种是正面的,一种是负面的:
(?<!username)(?<=name).*?(?=;)
另请注意删除了不必要的括号。
Avinash 的回答可能是我在这种情况下会使用的,但我想我会以这种方式显示以防万一 \b
对未来的访问者不起作用,例如名称以 [=12 结尾的所有数据=] (streetname
, cityname
, 等等) 除了 username
.