仅匹配角色的第一个实例

时间:2019-08-19 21:42:43

标签: regex xpath

我正在尝试将from sklearn.linear_model import ElasticNetCV from sklearn.datasets import make_regression X, y = make_regression(n_features=2, random_state=0) regr = ElasticNetCV(cv=5, random_state=0) regr.fit(X, y) >>> (regr.alpha_, regr.alphas_.min()) (0.1994727942696716, 0.1994727942696716) 这样的字符串中的字符的第一个实例与XPath::replace匹配为 only ,并用# to click into each drop down table rows driver.switch_to.default_content() driver.switch_to.frame(driver.find_element_by_name('mainFrame')) driver.switch_to.frame(driver.find_element_by_name('ListWeb')) page = BeautifulSoup(driver.page_source, "html.parser") items = page.select(".Level2Table tr[name^='Item']") for item in items: item_data = item.select("td") pmid = item_data[0].text plant = item_data[1].text direction = "up" if "up_arrow.png" in item_data[2].select_one("img").attrs["src"] else "down" disease = item_data[3].text print(f"pmid: {pmid}, plant: {plant}, direction: {direction}, disease: {disease}") 替换它结果字符串为sdtmig-3-1-2。除了可以在其中包含一个或多个破折号之外,我无法保证有关该模式的其他任何事项。我很难找到仅与/的特定第一个实例一致的正则表达式模式。

我觉得自己很亲近:

sdtmig/3-1-2

但这也与完整字符串匹配,所以不好。

请不要使用仅适用于https://regex101.com的普通正则表达式来提供解决方案。 正则表达式的“风味”应遵守XPath / XQuery语义(https://www.w3.org/TR/xmlschema-2/#regexs)。我无法控制正则表达式搜索中的全局标志。

1 个答案:

答案 0 :(得分:0)

在不引入g (global flag)的情况下,正则表达式最多将匹配一次。这等效于像'sdtmig-3-1-2'.replace('-', '/')这样的普通replace调用,其结果为"sdtmig/3-1-2"

请参阅plain regular expression usage (make sure the global modifier is turned off and use /-/ regular expression with a substitution of /)

例如:

console.log('sdtmig-3-1-2'.replace(/-/, '/'));

使用全局标志,它将替换所有出现的内容:

console.log('sdtmig-3-1-2'.replace(/-/g, '/'));

您还可以在第一次出现之前使用任何内容的惰性前缀匹配,然后将匹配的组替换为其原始内容,以便它们围绕被替换的字符。请参见正则表达式:
(.*?)-(.*) and a substitution of $1/$2。 这应该适用于XQuery replace function

console.log('sdtmig-3-1-2'.replace(/(.*?)-(.*)/, '$1/$2'));